当我在django表单中定义字段时会发生什么:
class FooForm( ModelForm ):
class Meta:
model = FooModel
fields = ( 'foo', 'bar', ) # I am talking about this field
当我的模型中有 foo,bar和baz 字段时,在这种情况下baz会发生什么?
这些字段是否自动需要?他们刚刚上市吗?当我这样做时,该领域究竟发生了什么?
答案 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=True
和blank=True
。
默认情况下,模型字段是必需的,因此如果不需要它们,则必须让django知道。根据字段类型,要创建不需要的字段,您需要放置null=True
和/或blank=True
。
可以在docs中找到有关django如何根据模型确定是否需要字段的更多信息。