我试图在我自己的项目中实现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_FORMS
,form-INITIAL_FORMS
和form-MAX_NUM_FORMS
。除了测试代码之外,Nicole的代码似乎没有这个。但是,如果我只是用下面的线条人工地将它注入到视图中,它没有帮助(同样的错误),所以我不知道我做错了什么:
data = {'form-TOTAL_FORMS': '1',
'form-INITIAL_FORMS': '0',
'form-MAX_NUM_FORMS': ''
}
survey_formset = SurveyFormSet(request.POST, data)
答案 0 :(得分:1)
首先,如果您使用的是表单集,则必须在模板的表单标记中包含管理表单。
{{ survey_formset.management_form }}
接下来,如果您将表单添加到formset或删除它们,则需要递增/递减管理表单的form-TOTAL_FORMS
输入的值。 django-dynamic-formset jQuery插件负责为您完成此操作。如果你不使用它,那么你必须自己做。
最后,这条线没有意义。
survey_formset = SurveyFormSet(request.POST, data)
表单数据中的字段应该在request.POST
中,您不能使用第二个参数添加其他数据。