2012-04-24 75 views
1

我仍然表單集戰鬥,我真的不能明白爲什麼我收到此錯誤:Django的modelformset_factory - 管理表單數據丟失

u'ManagementForm數據丟失或已被篡改

那是我的代碼: 請指出我的錯誤,並幫助我解決這個問題。

@csrf_protect 
@transaction.commit_on_success 
def signup(request): 
    form = NewUserCreationForm() 
    doc_form = NewDocRegisterForm() 

    SpecialityLicensesFormSet = modelformset_factory(SpecialityLicenses, extra=1, exclude = ('user')) 
    formset = SpecialityLicensesFormSet(queryset=SpecialityLicenses.objects.none()) 

    if request.method == "POST": 

     form = NewUserCreationForm(request.POST or None) 
     doc_form = NewDocRegisterForm(request.POST or None) 
     formset = SpecialityLicensesFormSet(request.POST or None) 


     if form.is_valid() and doc_form.is_valid() and formset.is_valid(): 

      user = form.save() 

      doc = doc_form.save(commit=False) 
      doc.user = user 
      doc.save() 



      print formset 
      fset = formset.save(commit=False) 

      for n in fset: 
       n.user = user 
       n.save() 

      return HttpResponse("Uzytkownik utowrzony") 

    return render_to_response("userena/signup_new.html", {'form': form, 
                  'doc_form': doc_form, 
                  'spec_form': formset,}, 
           context_instance=RequestContex 

t(request)) 

模板代碼:

<form action="/en/accounts/doc_register/" method="post">{% csrf_token %} 
    {% for field in form %} 


    <div> 
     {% if field.errors %} 
      {{ field.errors|striptags }} | 
     {% endif %} 

     {{field.label}} | {{ field}} 
    </div> 


    {% endfor %} 

    <hr> 


    {% for f in doc_form %} 
    <div> 
    {% if f.errors %} 
    {{f.errors|striptags}} | 
    {% endif %} 

    {{f.label}} : {{ f }} 
    </div> 
    {% endfor %} 
    <hr> 

    {{ spec_form.management_form }} 
    {{ spec_form }} 

      <hr> 
    <input type="submit" value="Submit"/> 
</form> 
{% endblock %} 
+0

我們也需要看你的模板代碼。 – Brandon 2012-04-24 18:01:00

+0

添加模板代碼:) – Efrin 2012-04-24 18:02:38

+0

您的視圖中的'formset'與您的模板中的'spec_form'不匹配。 – Alasdair 2012-04-24 18:11:08

回答

8

你不需要做{{ formset.management_form }}如果你{{ formset }},只是如果你

{{ formset.management_form }} 
{% for form in formset %} 
    {{ form }} 
{% endfor %} 

嘗試從模板移除{{ spec_form.management_form }}位。看看the third example

+1

哈哈,我昨天剛碰到這個問題。除非你仔細閱讀整篇文章,否則在文檔中找到它有點棘手。 (誰有這個時間?) – aglassman 2012-04-24 19:57:40

+2

只是不去說這個IRC頻道... – Lacrymology 2012-05-02 17:49:09