这里可能是愚蠢的或已经回答过的问题,对此感到抱歉。
我知道根据定义,布尔值应该有 2 个值,但我想知道Django 中存储"第三个"None
值的好做法是什么,比如说对于可选的布尔字段。
到目前为止,我使用带有"是"、"否"、"no_data"的CharField
或ChoiceField
,但我觉得这不是最佳的。有没有更好的方法可以使用可以存储真/假/空或类似内容的特殊布尔字段?
您可以使用NullBooleanField
。
DjangoNullBooleanField
这是一个BooleanField
的子类,但null=True
和blank=True
都成立。
在 django-2.1 中,文档提到null=True
是允许用于BooleanField
的,并且NullBooleanField
可能会被弃用:
在旧版本中,此字段不允许
null=True
,因此您必须 请改用NullBooleanField
。现在不鼓励使用后者,因为 它可能会在未来版本的 Django 中被弃用。
在早期的Django版本中,不可能写BooleanField(null=True)
,但这种行为已经改变。
无论将使用什么,这个想法是数据库可以存储三个可能的值:TRUE
(映射到True
(、FALSE
(映射到False
(和NULL
(映射到None
(。
请注意,就像CharField
一样,您可以设置choices
,让值映射到更"敏感"的显示器上。