Django模型中的空白字段工作不正常

Django模型中的空白字段工作不正常,django,django-models,Django,Django Models,我有一个Django模型,描述如下- class Building(models.Model): name = models.CharField(max_length=25,unique=True,blank=False) country = models.CharField(max_length=20,blank=False) city = models.CharField(max_length=20,blank=False) def __str__(self

我有一个Django模型,描述如下-

class Building(models.Model):
    name = models.CharField(max_length=25,unique=True,blank=False)
    country = models.CharField(max_length=20,blank=False)
    city = models.CharField(max_length=20,blank=False)

    def __str__(self):
        return self.name

所有字段都是必需的,因为在每个字段中空白都设置为False,但我仍然可以通过将城市和国家保留为空白来保存此模型的对象。

blank=True
ModelForm
层强制执行,如下所示:

请注意,这与
null
不同
null
纯粹与数据库相关,而
blank
与验证相关。如果字段具有
blank=True
表单验证将允许输入空值。如果某个字段有
blank=False
,则该字段为必填字段


因此,当您没有为
名称
城市
国家
输入值时,使用此模型的
模型表单
将引发错误。但不是模型层。事实上,模型层不会验证任何约束,除非调用
.clean()
,或者数据库拒绝这些值。

这并不奇怪,
blank=…
ModelForm
s强制执行,它不会在模型层强制执行。因此,如果我没有使用ModelForm将表单值映射到django模型,而是,直接在视图中创建模型实例是行不通的?的确如此。
ModelForm
有多种用途:它删除样板代码,可以呈现为HTML表单,并执行验证(从而检查
blank=False
)。是的,根据文档,它包括两层验证,一个在表单级别,另一个在模型实例级别。但是没有(主动)完成模型层的验证。您可以调用
.clean()
对模型进行一些验证,但出于性能原因,默认情况下跳过该值。