2012-02-23 2 views
4

私はいくつかの余分なフォームと、私のページにdjango formsetsを持っています。私は、ユーザーに(最初に)すでにデータが入っているフォームを表示したいだけです。POSTのデータに基づくDjangoフォームセットの初期フォームの数が増えていますか?

現在、私は隠されたとして、各フォームをレンダリングすることにより、これを処理:

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

すでにデータを持っているもの公開するためにはJavaScriptを使用して、その後

[.incorporate_directors_formset_invisible_divだけdisplay:none;を設定します]:

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を削除し、をインクリメントしますカウント]

これまでのところ、とても良いです。これは、フォームセットが初期データだけを含んでいる場合に完全に機能します。

私の問題は、一部のデータがフォームに入力され、フォームが無効として検証された場合、上記のコードは既存の、しかし間違ったフォームを表示しないように、INITIAL_FORMSの値は元のままです。

私の見解では、ブラウザで送信されたTOTAL_FORMSの数に合わせてINITIAL_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

それは解決策は、実際の要求データを修正するためにフォームセットの管理フォームを使用することであることが判明:

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

+0

@binithb必要なときはいつでも。おそらく、見解で。 – Marcin

+0

このソリューションを使用する場合、私は 'MultiValueDictKeyError'を取得し続けます。 –

関連する問題