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