2016-02-26 57 views
1

我有我的表单集下面的代码:表单集渲染始终两种形式为默认的Django

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 %} 

创建和删除的形式formset由JavaScript处理,但仅在单击按钮时激活。如果用户编辑JavaScript并删除验证页面必须具有多少表单的条件,则他可以在表单集中提交没有任何表单的页面。

如果我在构造函数中设置了min_num=0,用户可以使用上面的方案并通过验证。如果我将它设置为min_num=1,他不得不在表单集内生成两个表单。

回答

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) 

也做了您的线路短一点,这样你就不必那么多的滚动。

+0

是的,就是这样。如果你问我,将它作为默认值1是有点愚蠢的。它总是生成两种形式,你不知道为什么。谢谢您的帮助! –

+0

也许,但它在文档中。请注意,如果您提交,空白表单将被忽略。我认为它的存在使得用户明显可以添加更多内容。 –