来自模型的初始表单数据 - Django

时间:2012-05-31 16:36:27

标签: django

我正在尝试为我的模型创建一个编辑表单。我没有使用模型表单,因为根据模型类型,用户可以使用不同的表单。 (例如,其中一个表单有一个Tinymce小部件,而另一个没有。)

有没有办法使用模型设置表单的初始数据(不是ModelForm)?

我尝试了以下操作但收到错误:

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

其中fforms.Form

的子类

我得到的错误是AttributeError: 'Business' object has no attribute 'get'

2 个答案:

答案 0 :(得分:6)

初始数据必须是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,但它可能更方便找到一些结构化代码的方法,允许你这样做。

答案 1 :(得分:5)

使用模型数据的方法比dict更直接。请参阅documentation中的示例。

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