【问题标题】:Blank field not working correctly in Django modelDjango 模型中的空白字段无法正常工作
【发布时间】: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


【解决方案1】:

blank=TrueModelForm 层强制执行,如documentation on the blank=… parameter [Django-doc] 中所指定:

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

因此,如果您不输入 namecitycountry 的值,使用此模型的 ModelForm 将引发错误。但不是模型层。事实上,模型层不会验证任何约束,除非你调用.clean(),或者数据库拒绝这些值。

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 2020-12-27
    • 2021-10-01
    • 2017-11-08
    相关资源
    最近更新 更多