将 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_forms 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 仅当所有形式都有效时才调用。