使用Model中的默认字段值保存Django ModelForm

时间:2013-02-04 21:46:53

标签: python django django-models django-forms

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

FooModel

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

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

  1. 在FooForm构造函数中指定实例(f = FooForm(request.POST) if f.is_valid(): f.save()

  2. 创建FooModel的实例并手动将自动生成的值分配给表单的数据:

    f = FooForm(request.POST, instance=FooModel())
  3. 更新

    通过更准确地阅读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()
    

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

  

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

回答你问题的这一部分

class FooForm(ModelForm):
    class Meta:
        model = FooModel
        exclude = ('not_displayed_field',)