将formset作为Django中函数的参数传递

时间:2015-02-21 12:45:09

标签: django django-forms django-views

我想将一个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']

1 个答案:

答案 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