2016-02-26 79 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

也許,但它在文檔中。請注意,如果您提交,空白表單將被忽略。我認爲它的存在使得用戶明顯可以添加更多內容。 –