我正在尝试为我的模型创建一个编辑表单。我没有使用模型表单,因为根据模型类型,用户可以使用不同的表单。 (例如,其中一个表单有一个Tinymce小部件,而另一个没有。)
有没有办法使用模型设置表单的初始数据(不是ModelForm
)?
我尝试了以下操作但收到错误:
b = get_object_or_404(Business, user=request.user)
form = f(initial = b)
其中f
是forms.Form
我得到的错误是AttributeError: 'Business' object has no attribute 'get'
答案 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)