Django 模型字段默认为 Null
Posted
技术标签:
【中文标题】Django 模型字段默认为 Null【英文标题】:Django Model Field Default to Null 【发布时间】:2011-06-04 00:55:59 【问题描述】:我需要让我的 Django 应用程序允许我为某个模型字段设置默认值 NULL。我查看了 null、blank 和 default 参数,但不清楚我需要使用这三个参数的什么组合得到想要的效果。我试过设置default=NULL
,但它抛出了一个错误。如果我指定 blank=True, null=True
并且没有默认值,它会在运行时默认返回 NULL 吗?
【问题讨论】:
【参考方案1】:试试default=None
。 python 中没有NULL
。
【讨论】:
为了清楚起见,他所指的 NULL 是针对 Django 模型字段的。这允许/禁止将 None 值用于该值,该值在数据库中存储为 NULL,而不是在 Python 中。空白是指在forms/admin/etc中验证是否需要该值。 @Nexion,default=None
不允许或不允许使用 None 值。如果没有指定,它只是告诉 Django 该字段的值应该是什么。 null=True
确实允许在 Python 代码中使用 None。它在数据库中被视为 NULL。你说的对,将空白用于表单验证。
澄清一下:我有新的证据表明,即使您使用 default=None,您仍然需要设置 null=True,否则您不仅会收到 psycopg2 错误,还会收到 django。 db.utils.IntegrityError 作为额外奖励。如果你因为 django 告诉你要设置默认值而将所有这些 None 放在那里,现在你可以撤消所有这些,因为,嘿,你拥有世界上所有的时间,对吧?【参考方案2】:
如果您在模型字段上指定 null=True,则如果用户未提供值,则该值将在数据库中存储为 NULL。
【讨论】:
大多数情况下并非如此,因为通常它会存储一个空字符串。 @AlfonsIngomar 不正确,来自文档 - docs.djangoproject.com/en/1.8/ref/models/fields/#null “如果为真,Django 会将空值作为 NULL 存储在数据库中。默认值为 False。” 看下一段:避免在基于字符串的字段(例如 CharField 和 TextField)上使用 null 因为空字符串值将始终存储为空字符串,而不是 NULL。如果基于字符串的字段具有 null=True,这意味着它有两个可能的“无数据”值:NULL 和空字符串。在大多数情况下,“无数据”有两个可能的值是多余的; Django 约定是使用空字符串,而不是 NULL。 是的,我已阅读文档,谢谢,在原始帖子或我的回复中没有提到基于字符串的字段。如果将 null=True 放在基于字符串的字段上,如果没有输入数据,它将在数据库中存储为 NULL。我完全不知道您在此处试图指出与本次讨论相关的内容。在每种情况下都是如此,如果您将 null=True 空值存储为 NULL。文档建议您不要将 null=True 放在字符串上,因为那样它们将被存储为 NULL,并不是说放置 null=True 将被字符串字段忽略。 也许我的解释是错误的,但是在这种情况下,文档是什么意思,“因为空字符串值将始终存储为空字符串,而不是 NULL”?【参考方案3】:blank=True
允许您不输入任何内容(即""
、None
)并保持为空。
null=True
表示允许数据库行为NULL
。
default=None
如果没有给出其他值,则将该字段设置为 None
。
【讨论】:
以上是关于Django 模型字段默认为 Null的主要内容,如果未能解决你的问题,请参考以下文章