【发布时间】:2020-06-19 10:30:42
【问题描述】:
我有一个如下描述的 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=...对ModelForms强制执行,在模型层没有强制执行。 -
所以如果我不使用 modelForm 将表单值映射到 django 模型,而是直接在视图中创建模型实例,它不会起作用?
-
确实如此。
ModelForm有多种用途:它删除样板代码,可以呈现为 HTML 表单,并执行验证(从而检查blank=False)。 -
是的,根据文档,它包括两层验证,一层在表单级别,另一层在模型实例级别。
-
但是模型层的验证没有(主动)完成。您可以调用
.clean()对模型进行一些验证,但出于性能原因,默认情况下会跳过验证。
标签: django django-models