0

我有一个模型FooModel,有 2 个字段,默认值 ( default=xxx) 并标记为空白 ( blank=True),我创建了一个ModelForm( django.forms.ModelForm) FooModel,现在我想在提交后保存它,所以在我看来,我有以下代码:

f = FooForm(request.POST)

if f.is_valid():
  f.save()

问题是,通过这种方式,我从数据库中获得了违规异常,因为未在 html 表单中呈现的字段不会像我期望的那样在 FooForm 实例中自动继承......我怎样才能包含来自原始模型的字段哪些不应该显示给用户?(我不想将它们渲染为隐藏字段!)

到目前为止,我尝试了 2 种方法,都失败了...

  1. 在 FooForm 构造函数中指定实例 ( f = FooForm(request.POST, instance=FooModel()))

  2. 创建一个 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()
4

2 回答 2

1

也尝试这里提到的方法https://docs.djangoproject.com/en/1.4/topics/forms/modelforms/#using-a-subset-of-fields-on-the-form

于 2013-02-04T22:44:15.957 回答
0

如何包含不应向用户显示的原始模型中的字段?

回答你问题的这一部分

class FooForm(ModelForm):
    class Meta:
        model = FooModel
        exclude = ('not_displayed_field',)
于 2013-02-04T22:00:04.803 回答