2010-07-10 47 views
6

我有一個models.py類,如下管理形式的錯誤,同時使用modelformsets(「ManagementForm數據丟失或已被篡改」)

class Educational_Qualification(models.Model): 
    user = models.ForeignKey(User) 
    exam = models.CharField(max_length=40) 
    pass_month = models.CharField(max_length=40) 

我有一個views.py如下

def create_qualification(request): 
QFormSet = modelformset_factory(Educational_Qualification, extra=3, exclude=("user",)) 
if request.method == "POST": 
    formset = QFormSet(request.POST, request.FILES) 

    if formset.is_valid(): 
    formset.save() 
    for form in formset.forms: 
    if form.is_valid(): 
    quali= form.save(commit=False) 
    quali.user = request.user 
    quali.save() 

    return HttpResponse("Saved") 
    else: 
    return HttpResponse("Snafu") 
else: 
    formset = QFormSet() 
return render_to_response("register/edu.html", {"formset":formset}, context_instance=RequestContext(request)) 

當我提交表單時,它拋出驗證錯誤。說明ManagementForm數據丟失或被篡改'

我在我的模板中有formset.management_form。

可能是什麼問題?

回答

24

錯誤不在您的視圖或模型中,而是在模板中。

渲染該formset正確的方法是:

<form method="post" action=""> 
    <table> 
     {{ formset }} 
    </table> 
</form> 

<form method="post" action=""> 
    {{ formset.management_form }} 
    <table> 
     {% for form in formset.forms %} 
      {{ form }} 
     {% endfor %} 
    </table> 
</form> 

我猜,你是循環遍歷模板的形式,而不包括管理形式?

+0

謝謝,這確實解決了我的問題! – vdboor 2010-11-04 22:13:48

+0

太棒了!感謝:D – DanH 2013-03-22 04:45:52

0

如果涉及多個視圖並且其中一個不知道formset前綴,也會發生這種情況。

獲取視圖:

def someview(request): 
... 
    formset = Formset(prefix="foo") 
... 

後視圖(可能是一個Ajax表單提交處理程序):

def ajaxview(request): 
... 
    formset = Formset(request.POST, prefix="foo") # here 
... 
相關問題