在我目前的项目中,我正在研究我们在模型字段上使用default=None
,用于models.CharField(default='')
。这有什么意义吗?我查阅了Django文档,但找不到答案。我搜索了Django源代码和模型字段,初始设置为default=NOT_PROVIDED
,这被定义为
class NOT_PROVIDED:
pass
所以我现在更困惑了。在Django项目中运行我的测试,我有一种感觉,如果我使用default=None
或default=''
并不重要
差异取决于您将如何使用该特定数据。对于大多数情况,没有区别,但您必须清楚''
和None
是不同的Python数据类型:
>>> type('')
<class 'str'>
>>> type(None)
<class 'NoneType'>
>>>
所以当数据类型在数据的使用上下文中是超越的时候就会有区别。
如文档所示
避免在CharField和等基于字符串的字段上使用null文本框。如果一个基于字符串的字段有null=True,那就意味着它有" no data "有两种可能的值:NULL和空字符串。在大多数在这种情况下,为"no data"提供两个可能的值是多余的Django惯例是使用空字符串,而不是NULL。一个例外是当CharField同时具有unique=True和blank=True集合时。在这个情况下,需要null=True以避免违反唯一约束当保存多个带有空白值的对象时。