我有一个模型FooModel
,其中包含2个字段,其中包含默认值(default=xxx
)并标记为空白(blank=True
),我创建了ModelForm
({{1} }})使用django.forms.ModelForm
现在我想在提交后保存它,所以在我看来我有以下代码:
FooModel
问题是,这样我从数据库中获得了一个违规异常,因为未在html表单中呈现的字段不会像我期望的那样在FooForm实例中自动继承...我怎样才能包含来自不应该向用户显示的原始模型? (我不想将它们渲染为隐藏的字段!)
到目前为止,我尝试了两种方法,都失败了......
在FooForm构造函数中指定实例(f = FooForm(request.POST)
if f.is_valid():
f.save()
)
创建FooModel的实例并手动将自动生成的值分配给表单的数据:
f = FooForm(request.POST, instance=FooModel())
更新
通过更准确地阅读django文档,我以这种方式解决了:
i = FooModel()
f.data.fieldA = i.fieldA
f.data.fieldB = i.fieldB
但是,老实说,我不满意......我想抽象出那些字段的添加......也许是通过使用自定义装饰器......类似于:
if f.is_valid():
formModel = f.save(commit=False)
foo = FooModel()
formModel.fieldA = foo.fieldA
formModel.fieldB = foo.fieldB
formModel.save()
答案 0 :(得分:1)
同时尝试这里提到的方法https://docs.djangoproject.com/en/1.4/topics/forms/modelforms/#using-a-subset-of-fields-on-the-form
答案 1 :(得分:0)
如何包含原始模型中不应向用户显示的字段?
回答你问题的这一部分
class FooForm(ModelForm):
class Meta:
model = FooModel
exclude = ('not_displayed_field',)