在formset验证时,ManagementForm数据丢失错误

sta*_*ver 3 django validation django-forms formset

views.py中的formset创建:

ffact = formset_factory(Form,extra=somenum]))
fset = ffact(prefix='pfix')
Run Code Online (Sandbox Code Playgroud)

views.py中的验证:

ffact = formset_factory(Form,extra=3))
fset = ffact(request.POST) 
if fset_is.valid():
    blah blah
Run Code Online (Sandbox Code Playgroud)

这导致异常类型:ValidationError at/app/index/Exception Value:[u'ManagementForm数据丢失或被篡改'] django-docs 确实提到了这一点.我不确定如何提供管理数据.我试着像这样,

try:
  fset = ffact(request.POST)
except ValidationError:
  fset = None
if fset and fset.is_valid():
  blah blah
Run Code Online (Sandbox Code Playgroud)

但我仍然得到同样的错误.任何想法?谢谢.

Yuj*_*ita 8

管理数据是request.POSThttp://docs.djangoproject.com/en/dev/topics/forms/formsets/#understanding-the-managementform

以下信息必须包含在request.POST:

data = {
    'form-TOTAL_FORMS': u'1',
    'form-INITIAL_FORMS': u'0',
    'form-MAX_NUM_FORMS': u'',
}
Run Code Online (Sandbox Code Playgroud)

有一个用于渲染隐藏字段的快捷方式: {{ my_formset.management_form }}


sta*_*ver 8

在模板中呈现formset.management_form

{{fset.management_form}}
Run Code Online (Sandbox Code Playgroud)

这允许管理表单数据可用,因此数据是完整的.但是如果在生成表单集时添加了前缀

添加前缀应修复该问题.

fset = ffact(request.POST,prefix='pfix')
Run Code Online (Sandbox Code Playgroud)