2010-06-05 73 views
2

我有一個編輯對象視圖,其中包含一個formset(一個或多個,如果這很重要),現在我想創建一個頁面,可以顯示多個編輯對象的形式,並提交一個單一的形式。Django嵌套窗體集

什麼是實現此任務的正確方法?

+0

http://yergler.net/blog/2009/09/27/nested-formsets-with-django/ – 2010-06-05 19:40:38

+0

謝謝你,我看過這篇文章,但看起來它不是我的情況 – dragoon 2010-06-05 20:38:36

回答

4

我找到了解決方案。

我可以在編輯頁面上枚舉我的對象,並根據這些索引爲formset使用不同的前綴。這裏有一個例子:

首先,你需要枚舉,我實現它使用相同的輸入(複選框)的名稱與增量值:

<input type="checkbox" name="counter" value="0"> 
... 
<input type="checkbox" name="counter" value="1"> 
... 

計數器號被該formset和其他數據的序列號:

<!--Ordinary inputs--> 
<input type="text" name="data0" value="value0"> 
<input type="text" name="data1" value="value1"> 
<!--Formsets--> 
<input type="text" id="test0-0-data" name="test0-0-data" value="something"> 
<input type="text" id="test0-1-data" name="test0-1-data" value="something"> 
<input type="hidden" name="test0-TOTAL_FORMS" id="id_test0-TOTAL_FORMS" value="2"> 
<input type="hidden" name="test0-INITIAL_FORMS" id="id_test0-INITIAL_FORMS" value="0"> 

<input type="text" id="test1-0-data" name="test1-0-data" value="something"> 
<input type="hidden" name="test1-TOTAL_FORMS" id="id_test1-TOTAL_FORMS" value="1"> 
<input type="hidden" name="test1-INITIAL_FORMS" id="id_test1-INITIAL_FORMS" value="0"> 

然後,如果你的代碼填入這樣的表單集:

counter = request.POST.getlist('counter') 
for i in counter: 
    TestFormset = modelformset_factory(Test, form=TestForm) 
    test_formset = TestFormset(request.POST, prefix='test'+i, queryset=Test.objects.none()) 

我ACHI上面用JavaScript描述了HTML結構。

+0

你能詳細說一下嗎?一個Django新手? – UrLicht 2010-06-11 17:00:56

+0

我更新了我的答案,參見上文 – dragoon 2010-06-14 06:57:33