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=True
和 blank=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()
这里的重要区别是表单字段用于用户输入,而模型字段用于数据本身。
当我像这样在 Django 表单中定义一个字段时会发生什么:
class FooForm( ModelForm ):
class Meta:
model = FooModel
fields = ( 'foo', 'bar', ) # I am talking about this field
当我的模型中有 foo、bar 和 baz 字段时,在这种情况下 baz 会发生什么情况?
这些字段是否自动必填?他们只是可用吗?当我这样做时,那个字段实际上发生了什么?
使用此代码,它将根据 null=True
和 blank=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()
这里的重要区别是表单字段用于用户输入,而模型字段用于数据本身。