【问题标题】:Django model blank=False does not work?Django模型空白=假不起作用?
【发布时间】:2013-07-22 21:06:16
【问题描述】:

我在 Django 1.5 中有以下模型:

class Person(models.Model):
    name = models.CharField(max_length=50)

注意根据https://docs.djangoproject.com/en/dev/ref/models/fields/ name.blank 默认为 False,表示必须指定。

但是,我可以成功地创建一个 Person 对象,如下所示:

Person.objects.create()

请注意未指定名称。怎么回事?

好的,文档的答案是:

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

另一个问题:

请注意,当您保存模型时,验证器不会自动运行,但如果您使用的是 ModelForm,它将在您的表单中包含的任何字段上运行您的验证器。

如果您不使用表单,则在保存之前调用 clean 方法是您的责任。

【问题讨论】:

  • 首先,这是怎么回事name = ... 不要这样做。
  • 我相信 Games 指的是缩进。不建议按照 PEP-8 进行编码实践。
  • @bernie 是的,正是我想要得到的。

标签: django django-models


【解决方案1】:

blank 仅适用于 admin、django 表单等中的表单字段验证。
另一方面,null 是数据库级别的可空列。

至于为什么空白会导致默认'',我真的只是接受它为“这就是它的工作方式”,但它似乎在django.db.models.Field

  def get_default(self):
        """
        Returns the default value for this field.
        """
        if self.has_default():
            if callable(self.default):
                return self.default()
            return force_unicode(self.default, strings_only=True)
        if (not self.empty_strings_allowed or (self.null and
                   not connection.features.interprets_empty_strings_as_nulls)):
            return None
        return ""  
        #       ^ this

【讨论】:

  • 我从来不知道。学到了一些新东西。
  • 这太离谱了。实际上,在后端创建时似乎需要进行一些手动检查......另一个可能的解决方法是为这些 CharFields 设置 default=None。
【解决方案2】:

Django 使用空字符串创建您的用户。您实际上可以运行Person.objects.all(),它会给您一个列表,如果您将它保存到一个名为user_list 的变量中并执行类似user_list[0] 的操作,它将返回一个带有空字符串的用户对象。我不知道它是如何或为什么这样做的。

【讨论】:

    猜你喜欢
    • 2017-06-16
    • 2017-02-24
    • 2012-01-18
    • 1970-01-01
    • 2015-11-02
    • 2020-06-11
    • 2015-11-18
    • 2020-09-13
    相关资源
    最近更新 更多