2012-05-31 162 views
0

我正在嘗試爲我的模型創建一個編輯表單。我沒有使用模型表單,因爲根據模型類型的不同,用戶可以使用不同的表單。 (例如,其中一種形式具有Tinymce小部件,而另一種形式不具有。)模型的初始表單數據 - Django

是否有任何方式使用模型設置表單的初始數據(不是ModelForm)?

我嘗試以下,但得到的錯誤:

b = get_object_or_404(Business, user=request.user) 
form = f(initial = b) 

其中fforms.Form

的錯誤我得到一個子類是AttributeError: 'Business' object has no attribute 'get'

回答

5

初始數據需要一個dict (或者至少有一個類似於dict的界面,這是Django模型不具備的)。

可以使用django.forms.models.model_to_dict構建從模型dict

from django.forms.models import model_to_dict 
b_as_dict = model_to_dict(b) 

這是相同的功能Django的內置ModelForm類使用來設置它的初始數據,並且在你指定你做不想要使用ModelForm,找到某種可以讓你這樣做的代碼結構方式可能會更方便。

+0

是的,我同意你應該建立你自己的表格。您可以設置一個基礎表單,然後使用您需要的不同版本進行擴展。 –

5

有一種比dict更直接的使用模型數據的方法。請參閱樣本documentation

b = get_object_or_404(Business, user=request.user) 
form = f(instance = b) 
+0

爲什麼這個答案在實際上是更正確的答案時被低估了? – velis

+0

當表格被保存時,對象將被修改。通過接受的答案,將創建一個具有相似值的新對象。 –