这可能是一个愚蠢或已经有答案的问题,对此感到抱歉。
我知道按定义,布尔值应该具有2个值,但我想知道在Django中存储“第三” None
值的最佳实践,比如可选布尔字段。
目前,我使用 CharField
或 ChoiceField
,其中包括“是”,“否”,“无数据”,但我觉得这不是最优解。是否有更好的方法,可以使用特殊的BooleanField来存储true / false / null之类的东西?
这可能是一个愚蠢或已经有答案的问题,对此感到抱歉。
我知道按定义,布尔值应该具有2个值,但我想知道在Django中存储“第三” None
值的最佳实践,比如可选布尔字段。
目前,我使用 CharField
或 ChoiceField
,其中包括“是”,“否”,“无数据”,但我觉得这不是最优解。是否有更好的方法,可以使用特殊的BooleanField来存储true / false / null之类的东西?
Django有一个NullBooleanField
,它是BooleanField
的子类,但两者都可以使用null=True
和blank=True
。
在django-2.1中,文档提到null=True
允许使用在BooleanField
中,并且NullBooleanField
可能会被弃用:
null=True
,所以你必须使用NullBooleanField
。然而,使用后者现在已经不被推荐,因为它很可能会在未来的 Django 版本中被弃用。BooleanField(null=True)
,但这种行为已经改变了。TRUE
(映射到True
),FALSE
(映射到False
)和NULL
(映射到None
)。CharField
一样,您可以设置choices
,以便将值映射到更“合理”的显示方式。
NullBooleanField
只是将False
存储为null
而不是0
,感谢您的快速回答。 - Cyrlop