2012-02-23 72 views
4

我在我的頁面上有django formsets,有幾個額外的表單;我只想向用戶(最初)顯示其中已有數據的表單。根據POST中的數據增加Django formset中初始表單的數量?

目前我通過渲染每一形式處理這個隱藏:

{% for form in incorporate_directors_formset %} 
<tbody class="incorporate_directors_formset_div subform incorporate_directors_formset_invisible_div" id="incorporate_directors_formset_div_{{ forloop.counter }}"> 
     {{ form }} 
</tbody> 
<tr class="magic-last-row invisible"><td colspan=2><div></div></td></tr> 
{% endfor %} 

[.incorporate_directors_formset_invisible_div只是設置display:none;]

然後使用JavaScript來揭露已經有數據的那些:

for(i = directors_initialforms.val(); i > 0; i--) 
     director_form_to_display($('.incorporate_directors_formset_invisible_div').first(), false); 

[director_form_to_display幾乎只是刪除類.incorporate_directors_formset_invisible_div和增量TOTAL_FORMS count]

到目前爲止,這麼好。當formset只包含初始數據時,這是完美的。

現在,我的問題是,當一些數據輸入到表單中,並且表單被驗證爲無效時,INITIAL_FORMS的值保持原來的狀態,所以上面的代碼不會顯示現有的錯誤表單。

在我看來,如何增加INITIAL_FORMS計數以匹配瀏覽器發回的TOTAL_FORMS計數?或者,或者,否則確保INITIAL_FORMS計數足夠大?

我已經試過holding_formset.initial_forms = holding_formset.forms但給:

Traceback (most recent call last): 

File "<debugger>", line 1, in <module> 
holding_formset.initial_forms = holding_formset.forms 
AttributeError: can't set attribute 

回答

0

事實證明,該解決方案是使用該formset的管理形式修改實際的請求數據:

from django.forms.formsets import INITIAL_FORM_COUNT 
if formset.initial_form_count() < formset.total_form_count(): 
    manform = formset.management_form 
    prefixed_name = manform.add_prefix(INITIAL_FORM_COUNT) 
    manform.data[prefixed_name] = formset.total_form_count() 
+0

以及如何/在哪裏使用這個manform實例? – binithb 2016-01-20 21:38:57

+0

@binithb無論你需要什麼。可能在視圖中。 – Marcin 2016-01-20 22:45:20

+0

我在使用此解決方案時不斷收到'MultiValueDictKeyError'。 – 2017-09-11 10:46:22