这就是我在一个django模板中有两个formset来验证formset,django使用管理数据来验证formset如下:
'form-TOTAL_FORMS': '1',
'form-INITIAL_FORMS': '0',
'form-MAX_NUM_FORMS': '',
但是当我想同时发布两个formset时,他们需要两个不同的验证数据,例如,我提交时我的第一个formset有1个表单,而第二个formset有2个表单,所以第一个需要一个像上面那样的数据但是第二个需要两个“TOTAL_FORMS”值,但是帖子只发送了一个验证数据,所以只有一个formset是有效的而另一个不是。如果两个表单集中的表单数量相同(第一个表单有一个表单,第二个表单也有一个表单),它们会通过验证,因为管理数据适用于两者。
我的模板如下
{% extends 'prescription_menu.html' %}
{% load bootstrap3 %}
{% load crispy_forms_tags %}
{% block css %}
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}site/css/select2.css"/>
{% endblock %}
{% block title %}Physicians{% endblock title %}
% block container %}
{% csrf_token %}
<div class="row">
<div class="col-md-offset-2 col-md-8">
{% crispy person_form %}
{% crispy employee_form %}
{% crispy physician_form %}
{% crispy address_form %}
{% crispy phone_form %}
<form id="otherForm" method="POST">
<legend>Specialties</legend>
{{ spec_formset.management_form }}
{{ ac_de_formset.management_form }}
{% for specialty, degree in SDU %}
{% crispy specialty helper %}
{% crispy degree helper %}
<legend></legend>
{% endfor %}
</form>
<form id="emailsForm" method="POST">
{{ em_formset.management_form }}
{% for email in em_formset %}
{% crispy email helper %}
{% endfor %}
</form>
<input type="button" name="Save" value="Save" class="btn btn-primary" id="submit-id-save" onclick="submitForms()">
</div>
</div>
{% endblock container %}
{% block javascript %}
<script>
submitForms = function(){
document.getElementById("otherForm").submit();
document.getElementById("emailsForm").submit();
}
</script>
{% endblock javascript %}
答案 0 :(得分:2)
在视图中构建表单集时使用prefix
参数,以使两个表单集不共享命名空间,例如:
spec_formset = SomeFormsetClass(prefix="spec")
ac_de_formset = SomeOtherFormsetClass(prefix="ac_de")
docs有完整的详细信息。