django模型表单字段=()行为

时间:2015-02-16 14:01:50

标签: django django-forms

当我在django表单中定义字段时会发生什么:

class FooForm( ModelForm ):
  class Meta:
    model = FooModel
    fields = ( 'foo', 'bar', ) # I am talking about this field

当我的模型中有 foo,bar和baz 字段时,在这种情况下baz会发生什么?

这些字段是否自动需要?他们刚刚上市吗?当我这样做时,该领域究竟发生了什么?

2 个答案:

答案 0 :(得分:2)

当您使用fields = ('foo', 'bar',)时,表单中根本不存在字段baz,除非您明确设置它(仅fields“填写”缺少的模型字段)。使用form.save()时,baz也未设置为模型上的值。如果模型上需要该字段,则代码必须确保在将模型保存到数据库之前设置该字段。

完全有可能,而且经常是必要的,有一个不在表单中的必填字段。例如。当您必须将模型与当前用户关联时,可以从表单中删除user字段,然后使用:

obj = form.save(commit=False)
obj.user = request.user
obj.save()

这里的重要区别是表单字段用于用户输入,模型字段用于数据本身。

答案 1 :(得分:0)

使用此代码,它将确定您的FooModel是否需要字段,具体取决于null=Trueblank=True

默认情况下,模型字段是必需的,因此如果不需要它们,则必须让django知道。根据字段类型,要创建不需要的字段,您需要放置null=True和/或blank=True

可以在docs中找到有关django如何根据模型确定是否需要字段的更多信息。