将 formset 作为参数传递给 Django 中的函数
Pass formset as an argument to a function in Django
我想将表单集作为参数传递给函数并验证表单集。如果问题不正确,请有人更正问题。
这是我的功能:
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']
您似乎忘记将 management_form
s in your html template or to add the 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()
函数是更正确的解决方案 - 它检查所有通过的 forms/formsets.
但我更喜欢使用 python 的内置 all()
函数:
if all([form.is_valid(), formset1.is_valid(), formset2.is_valid()]):
在这种情况下,is_valid()
为列表构造中的每个 form/formset 调用,并且 all()
returns True
仅当所有形式都有效时才调用。
我想将表单集作为参数传递给函数并验证表单集。如果问题不正确,请有人更正问题。
这是我的功能:
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']
您似乎忘记将 management_form
s in your html template or to add the 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()
函数是更正确的解决方案 - 它检查所有通过的 forms/formsets.
但我更喜欢使用 python 的内置 all()
函数:
if all([form.is_valid(), formset1.is_valid(), formset2.is_valid()]):
在这种情况下,is_valid()
为列表构造中的每个 form/formset 调用,并且 all()
returns True
仅当所有形式都有效时才调用。