【问题标题】:What is the default value of django's model field options ``blank`` and ``null`` when they're not set?django 的模型字段选项“空白”和“空”未设置时的默认值是多少?
【发布时间】:2017-02-26 15:03:31
【问题描述】:

documentation 中,我找不到这个问题的答案。

如果我想让一个字段留空,我是否必须明确设置blank=True

编辑:我是盲人。或者愚蠢。感谢您向我指出这一点;)

【问题讨论】:

    标签: django django-models


    【解决方案1】:

    我知道您已经链接了这些文档,但我要为遇到相同问题的任何人明确指出这一点。不过,您的标题问题的答案在文档中明确而明确地存在 - 默认情况下两者都是False。如果您希望该字段为blank=True,那么是的,您需要在每个字段上手动指定。

    空白代表表格:

    如果为 True,则该字段允许为空。默认为 False。

    请注意,这与 null 不同。 null 纯粹是 与数据库相关,而空白与验证相关。如果一个字段有 空白=真,表单验证将允许输入空值。如果一个 字段有空白=假,该字段将是必需的。

    如果您保存的记录在该字段中没有任何内容,则空是存储在数据库中的内容。同样,此字段的属性是 null=False

    如果为 True,Django 会将空值作为 NULL 存储在数据库中。默认为 False。

    避免在基于字符串的字段(例如 CharField 和 TextField 因为空字符串值将始终存储为空 字符串,而不是 NULL。如果基于字符串的字段具有 null=True,则 意味着它有两个可能的“无数据”值:NULL 和空 细绳。在大多数情况下,有两个可能的值是多余的 “没有数据;” Django 的约定是使用空字符串,而不是 NULL。

    对于基于字符串和非基于字符串的字段,您还需要 如果您希望在表单中允许空值,则设置 blank=True,因为 null 参数只影响数据库存储(见空白)。

    在很多情况下,您希望表单为空白,但数据库条目为not Null - 例如you were specifying your own custom slug on model save

    当然,这也意味着您从主 Field 类派生的任何自定义 Fields 都将具有相同的默认行为。如果这真的让你感到困扰,你可以用你想要的行为覆盖 Field 类,但这对于其他追随你的人来说真的很麻烦。

    【讨论】:

    • 避免在基于字符串的字段(例如 CharField 和 TextField)上使用 null,因为空字符串值将始终存储为空字符串,而不是 NULL”。我想更好地理解这句话。她的意思是我最好避免使用null=True,因为如果我想允许在基于字符串的字段中保存“无数据”值,那只是保存空字符串?
    • 是的,否则您可以将 Null 和 '' 作为没有数据的值。如果您为这些字段保留null=False 并且不向它们保存值,则该值自动为'',一个空字符串。
    猜你喜欢
    • 2020-07-29
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    相关资源
    最近更新 更多