我想将一个formset作为参数传递给一个函数,并希望验证formset。如果问题不正确,有人请更正问题。
这是我的功能:
def valid_check(*args):
valid = True
for arg in args:
if not arg.is_valid():
valid = False
return valid
valid = valid_check(form1,formset1,formset2)
if valid:
#do something
但这不起作用并显示此错误:
[u'ManagementForm data is missing or has been tampered with']
答案 0 :(得分:3)
似乎您忘记在html模板中输出management_form
或将prefix
添加到表单集中:
formset1 = FormSet1(prefix='formset1')
formset2 = FormSet2(prefix='formset2')
然后在模板中:
{{ formset1.management_form }}
{{ formset2.management_form }}
更新:对评论中提出的问题:
绝不使用if form.is_valid() and formset1.is_valid:
声明。如果form
无效,则formset
验证将无法运行。所以你的valid_check()
函数是更正确的解决方案 - 它检查所有传递的表单/表单集。
但我更喜欢使用python的内置all()
函数:
if all([form.is_valid(), formset1.is_valid(), formset2.is_valid()]):
在这种情况下,为列表构造中的每个表单/表单集调用is_valid()
,并且all()
仅在所有表单都有效时才返回True
。