在模型中,null=True和blank=True的含义也取决于这些字段在表单类中的定义方式。
假设您已经定义了以下类:
class Client (models.Model):
name = models.CharField (max_length=100, blank=True)
address = models.CharField (max_length=100, blank=False)
如果表单类被定义为这样:
class ClientForm (ModelForm):
class Meta:
model = Client
fields = ['name', 'address']
widgets = {
'name': forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
'address': forms.TextInput (attrs = {'class': 'form-control form-control-sm'})
}
那么,由于模型中的blank=True,'name'字段将不再是必填项,而'address'字段将成为必填项,因此必须填写。
然而,如果ClientForm类定义如下:
class ClientForm (ModelForm):
class Meta:
model = Client
fields = ['name', 'address']
name = forms.CharField (
widget = forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
)
address = forms.CharField (
widget = forms.TextInput (attrs = {'class': 'form-control form-control-sm'}),
)
然后,两个字段('name'和'address')将是必填的,因为声明定义的字段保持不变(https://docs.djangoproject.com/en/3.0/topics/forms/modelforms/),即表单字段的'required'属性的默认值为True,这将要求填写字段'name'和'address',即使在模型中,该字段已设置为blank=True。
ForeignKey
的应用场景,其中blank=True
,但没有null=True
。当保存模型时,我想通过创建已发布的条目来自动“发布”它。因此,我不能将null
保存到数据库中,因为每个模型都必须是"published",但我希望能够在管理页面中留空该字段。 - Sergey Orshanskiy