Django模型字段默认为Null


70

我需要让我的Django应用程序允许我为某个模型字段设置默认值NULL。我已经查看了nullblankdefault参数,但是还不清楚我需要使用这三个参数的哪种组合才能获得理想的效果。我尝试设置,default=NULL但抛出错误。如果我指定blank=True, null=True并且没有默认值,那么运行时它将默认恢复为NULL吗?

Answers:


118

尝试default=None。有没有NULL蟒蛇


4
为了清楚起见,他所指的NULL是针对Django模型字段的。这允许/不允许将None值用于该值,该值作为NULL存储在数据库中,而不是在Python中。空白是指在forms / admin / etc中验证是否需要该值。
Nexion '16

2
@Nexion,default=None不允许或不允许使用None值。它只是告诉Django(如果未指定)该字段的值。 null=True确实允许在Python代码中使用None。在数据库中将其视为NULL。而且您对将空白用于表单验证是正确的。
Bobort

39

如果在模型字段上指定null = True,那么如果用户不提供值,则该值将以NULL的形式存储在数据库中。


9
在大多数情况下,情况并非如此,因为通常它将存储一个空字符串。
hY8vVpf3tyR57Xib 2015年

@AlfonsIngomar不正确的,从文档- docs.djangoproject.com/en/1.8/ref/models/fields/#null “如果为True,Django将空值存储在数据库中的NULL默认为false。”
凯文

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

2
是的,我已经阅读了文档谢谢,在原始帖子或我的回复中没有提到基于字符串的字段。如果在基于字符串的字段上放置null = True,则如果没有输入任何数据,它将在数据库中存储为NULL。我完全不知道您要在此处指出与该讨论相关的内容。在每种情况下,如果输入null = True,则确实是空值将存储为NULL。文档建议您不要将null = True放在字符串上,因为这样它们将被存储为NULL,并不是说将null = True会被字符串字段忽略。
凯文(Kevin)

2
也许我是用错误的方式解释的,但是在这种情况下,文档的含义是“因为空字符串值将始终存储为空字符串,而不是NULL”?
hY8vVpf3tyR57Xib 2015年

10
  • blank=True 允许你输入什么(即""None),并保持空。
  • null=True 表示允许数据库行为NULL
  • default=NoneNone如果没有其他值,则 将该字段设置为。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.