所以我环顾四周,似乎没有人遇到同样的问题,我不得不引起这个看似常见的错误。我在我的html中渲染了一些表单,如下所示:
<form method="post" action="">
{{ tags_formset.management_form }}
<!-- code displaying this formset -->
...
<!-- -->
<form method="post" action="">
{{ add_all_form.management_form }}
{{ add_all_form.addTagsToAll }}
<input type="submit" value="Add To Displayed Applicants" />
</form>
<form method="post" action="">
{{ remove_all_form.management_form }}
{{ remove_all_form.removeTagsFromAll }}
<input type="submit" value="Remove From Displayed Applicants" />
</form>
<input type="submit" value="Save Changes" />
</form>
当我没有两个内部表单时,formset正确显示,提交按钮用于提交表单。当我添加第二个两个表单时出现了几个问题:
- 提交按钮停止工作(虽然在选择其中一个formset的字段时按Enter键仍然提交表单
- add_all_form的提交有效并且它正常运行(不是问题,但有关下一点的有趣......)
- remove_all_form无效,因为'ManagementForm数据丢失或已被篡改'验证错误。
以下是创建表单的views.py代码:
TagsFormSet = formset_factory(TagsForm, formset=TagFormSet, extra=applicantQuery.count())
if request.method == 'POST':
tags_formset = TagsFormSet(request.POST, request.FILES, prefix='tags', applicants=applicantQuery)
add_all_form = TagAddAllForm(request.POST, request.FILES, prefix='addForm', applicants=applicantQuery)
remove_all_form = TagRemoveAllForm(request.POST, request.FILES, prefix='removeForm', applicants=applicantQuery)
redirect = False
if tags_formset.is_valid():
for tagForm in tags_formset.forms:
if 'tags' in tagForm.cleaned_data:
tagForm.saveTags()
if 'removeTags' in tagForm.cleaned_data:
tagForm.deleteTags()
redirect = True
if add_all_form.is_valid():
if 'addTagsToAll' in add_all_form.cleaned_data:
add_all_form.saveTagsToAll()
redirect = True
if remove_all_form.is_valid():
if 'removeTagsFromAll' in remove_all_form.cleaned_data:
remove_all_form.deleteTagsFromAll()
redirect = True
if redirect:
return http.HttpResponseRedirect('')
else:
initForms = []
tags_formset = TagsFormSet(prefix='tags', applicants=applicantQuery)
add_all_form = TagAddAllForm(prefix='addForm', applicants=applicantQuery)
remove_all_form = TagRemoveAllForm(prefix='removeForm', applicants=applicantQuery)
我真的无法弄清楚出了什么问题。我不知道为什么add_all_form在remove_all_form没有的时候工作,因为我基本上复制并粘贴了所有涉及的东西(如果你需要我可以发布Forms.py文件中的代码,但我不认为问题在那里.. 。)
请帮忙!
答案 0 :(得分:5)
您应该只使用一个<form>
标记。您可以在此处拥有任意数量的提交按钮,并且可以显示任意数量的表单,但所有表单都应位于单个<form>
标记内。
然后,所有管理数据都将以表格提交的形式正确发送,您的问题应该得到解决。
<form method="post" action="">
{{ tags_formset.management_form }}
<!-- code displaying this formset -->
...
<!-- -->
{{ add_all_form.management_form }}
{{ add_all_form.addTagsToAll }}
<input type="submit" value="Add To Displayed Applicants" />
>
{{ remove_all_form.management_form }}
{{ remove_all_form.removeTagsFromAll }}
<input type="submit" value="Remove From Displayed Applicants" />
<input type="submit" value="Save Changes" />
您的观点可以保持原样。