使用modelformsets时管理表单错误('管理表单数据丢失或已被篡改')
我有一个名为 models.py 的类,内容如下:
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。
这可能是什么问题呢?
2 个回答
0
如果有多个视图(也就是页面上的不同部分)在一起工作,而其中一个视图不知道表单的前缀,这种情况也会发生。
获取视图:
def someview(request):
...
formset = Formset(prefix="foo")
...
提交视图(可能是一个处理Ajax表单提交的程序):
def ajaxview(request):
...
formset = Formset(request.POST, prefix="foo") # here
...
25
这个错误不是出在你的视图或模型上,而是在模板里。
正确的方式来显示表单组是:
<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>
我想,你可能在模板中循环显示表单时,没有包含管理表单吧?