2010-07-10 48 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 
... 
相关问题