2012-05-31 199 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

当表格被保存时,对象将被修改。通过接受的答案,将创建一个具有相似值的新对象。 –