试图理解FormSet ManagementForm数据(因为错误="它缺少")

时间:2016-03-14 16:25:29

标签: django forms

我试图在我自己的项目中实现Nicole Harris' example个formset。虽然她使用formset向用户个人资料添加可变数量的链接,但我试图在调查中添加可变数量的问题。因此,我的代码在语法上非常相似(除非我不使用jquery插件动态地将<input>字段添加到网页,我使用自己的javascript)。

我在表单提交时遇到ManagementForm data is missing or has been tampered with错误,在我查看的行中,我尝试拨打survey_formset.is_valid()。以下是观点:

def create_survey(request):
    #create the formset, specifying the form and formset we want to use
    SurveyFormSet = formset_factory(SurveyQuestionForm, 
                                        formset=BaseSurveyFormSet)  
    survey_formset = SurveyFormSet(request.POST)
    #THE BELOW CALL THROWS A VALIDATION ERROR: ManagementForm data missing... 
    if survey_formset.is_valid(): 
        print("survey_formset is valid!")
    else:
        print("survey_formset is invalid. Here are the errors:")
        for k, v in survey_form.errors.items():
            print(k, ": ", v)

请原谅简洁;我真的不知道导致错误的原因,并且我试图不发布数十行不相关的视图/表单代码。我将添加任何其他要求的代码。

在模板中加入{{ survey_formset.management_form }}并没有什么不同。

the docs开始,ManagementForm需要form-TOTAL_FORMSform-INITIAL_FORMSform-MAX_NUM_FORMS。除了测试代码之外,Nicole的代码似乎没有这个。但是,如果我只是用下面的线条人工地将它注入到视图中,它没有帮助(同样的错误),所以我不知道我做错了什么:

data = {'form-TOTAL_FORMS': '1',
        'form-INITIAL_FORMS': '0', 
        'form-MAX_NUM_FORMS': '' 
       }
survey_formset = SurveyFormSet(request.POST, data)

1 个答案:

答案 0 :(得分:1)

首先,如果您使用的是表单集,则必须在模板的表单标记中包含管理表单。

{{ survey_formset.management_form }}

接下来,如果您将表单添加到formset或删除它们,则需要递增/递减管理表单的form-TOTAL_FORMS输入的值。 django-dynamic-formset jQuery插件负责为您完成此操作。如果你不使用它,那么你必须自己做。

最后,这条线没有意义。

survey_formset = SurveyFormSet(request.POST, data)

表单数据中的字段应该在request.POST中,您不能使用第二个参数添加其他数据。