繁体   English   中英

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

[英]Save a Django ModelForm with default fields values in Model

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

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()

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

回答问题的这一部分

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM