2016-01-27 70 views
2

我有一個django ModelForm來創建/編輯一些對象。Django:初始化字段的幾個實例的形式

我在UI添加新的附加字段,喜歡這裏的能力: http://bootsnipp.com/snippets/featured/dynamic-form-fields-add-amp-remove-bs3

,我從所有的域(主要和附加)收集數據,並保存到數據庫列表:

例如:

我在UI中加入ModelForm和幾個額外name字段name輸入字段。我發送的請求是這樣的:

name=test1&name=test2&name=test3等on..and節省到數據庫,如:

name = ['test1', 'test2', 'test3']

這裏一切都很好,但是......

當我想要顯示我的表單來編輯現有元素,我真的不知道如何將此列表中的數據name = ['test1', 'test2', 'test3']加載到我的ModelForm +如何使用數據生成這些附加字段..

你有什麼想法?

回答

0

我還沒有這樣做,但目前我正在進行的項目將在未來需要它,所以我已經查看了幾個來源。 雖然this tutorial是相當古老,我認爲它包含一些仍然適用的關鍵概念。 本教程介紹了有多種選擇的民意調查的django教程。下面的代碼概述了應該有三個選擇形式在第一面輪詢問題中提交。

pform = PollForm(instance=Poll()) 
cforms = [ChoiceForm(prefix=str(x), instance=Choice()) for x in range(0,3)] 

你說你想要你的表單顯示現有的元素進行編輯。 所以這裏Choice()應該替換爲模型的一個實例,所以對於你來說,你需要做一些類似於instance = name1的地方,其中name1 = Name.objects.get(id ='1')或者其他一些查詢獲取模型的一個實例。

本教程的作者也使得注意到這一問題:

「有了這樣的,你現在有哪些可以增加一個投票和3選擇它一次的對象視圖

製作編輯相同對象的視圖非常相似,您只需查詢Poll和Choice對象並使用它們代替空實例即可。您還可以使用Choice ID作爲ChoiceForm實例的前綴。 ModelForm是一旦將實例arg從新對象更改爲現有對象,它將成爲編輯表單而不是添加表單,因此您無需更改任何內部結構即可從添加到編輯。「

+0

我不認爲這是個好主意,因爲您會一直創建一個重複的表單(包含所有數據),當我只需要一個字段時 – pivanchy