FormSet 渲染总是两种形式作为默认的 Django
FormSet rendering always two forms as default Django
我的 FormSet 有以下代码:
Forms.py
class RequiredFormSet(BaseFormSet):
def __init__(self, *args, **kwargs):
super(RequiredFormSet, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False
CityFormSet = formset_factory(CityNameForm, min_num=1, max_num=5, validate_min=True, validate_max=True, formset=RequiredFormSet)
Template.html
{{ city_formset.management_form }}
{% for city_form in city_formset %}
{{ city_form.id }}
<div>
{{ city_form.city_name }}
</div>
<div>
{{ city_form.region }}
</div>
{% endfor %}
在表单集中创建和删除表单由 JavaScript 处理,但它仅在单击按钮时激活。如果用户编辑 JavaScript 并删除验证页面必须有多少个表单的条件,他可以在表单集中没有任何表单的情况下提交页面。
如果我在构造函数中设置 min_num=0
,用户就可以使用上面的方案并进行验证。如果我将它设置为 min_num=1
,他不能,但会在表单集中生成两个表单。
当然,只需更改此行:
CityFormSet = formset_factory(CityNameForm, min_num=1, max_num=5, validate_min=True, validate_max=True, formset=RequiredFormSet)
对此:
CityFormSet = formset_factory(CityNameForm, min_num=1, max_num=5,
validate_min=True, validate_max=True,
formset=RequiredFormSet, extra=0)
还使您的行更短一些,这样您就不必滚动太多。
在formset_factory中有选项extra,你可以使用extra=2
我的 FormSet 有以下代码:
Forms.py
class RequiredFormSet(BaseFormSet):
def __init__(self, *args, **kwargs):
super(RequiredFormSet, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False
CityFormSet = formset_factory(CityNameForm, min_num=1, max_num=5, validate_min=True, validate_max=True, formset=RequiredFormSet)
Template.html
{{ city_formset.management_form }}
{% for city_form in city_formset %}
{{ city_form.id }}
<div>
{{ city_form.city_name }}
</div>
<div>
{{ city_form.region }}
</div>
{% endfor %}
在表单集中创建和删除表单由 JavaScript 处理,但它仅在单击按钮时激活。如果用户编辑 JavaScript 并删除验证页面必须有多少个表单的条件,他可以在表单集中没有任何表单的情况下提交页面。
如果我在构造函数中设置 min_num=0
,用户就可以使用上面的方案并进行验证。如果我将它设置为 min_num=1
,他不能,但会在表单集中生成两个表单。
当然,只需更改此行:
CityFormSet = formset_factory(CityNameForm, min_num=1, max_num=5, validate_min=True, validate_max=True, formset=RequiredFormSet)
对此:
CityFormSet = formset_factory(CityNameForm, min_num=1, max_num=5,
validate_min=True, validate_max=True,
formset=RequiredFormSet, extra=0)
还使您的行更短一些,这样您就不必滚动太多。
在formset_factory中有选项extra,你可以使用extra=2