Django模型中的空白字段工作不正常
我有一个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
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()
对模型进行一些验证,但出于性能原因,默认情况下跳过该值。