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

django model form fields = () behaviour

当我像这样在 Django 表单中定义一个字段时会发生什么:

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

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

这些字段是否自动必填?他们只是可用吗?当我这样做时,那个字段实际上发生了什么?

使用此代码,它将根据 null=Trueblank=True 确定您的 FooModel 是否需要这些字段。

默认情况下,模型字段是必需的,因此如果不需要它们,您必须让 django 知道。根据字段类型,要使字段不需要,您需要输入 null=True and/or blank=True

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

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

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

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

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