代码之家  ›  专栏  ›  技术社区  ›  Cyrlop

布尔真/假/无

  •  1
  • Cyrlop  · 技术社区  · 8 年前

    可能很愚蠢或者已经回答了这个问题,抱歉。

    我知道根据定义布尔值应该有两个值,但我想知道 Django储存“第三个”的好做法是什么 None 值,例如可选布尔字段 .

    到目前为止我用 CharField 或者 ChoiceField 有“是”,“否”,“没有数据”,但我觉得这不是最理想的。有没有更好的方法可以使用一个特殊的BooleanField来存储true/false/null或类似的东西?

    2 回复  |  直到 8 年前
        1
  •  4
  •   willeM_ Van Onsem    8 年前

    Django有 NullBooleanField 这是一个 BooleanField 但两者都是 null=True 和 blank=True 等等。

    在 ,和 documentation 提到 空=真 是允许的 布尔菲尔德 ,而且 无布尔字段 可能会被弃用:

    在旧版本中,此字段不允许 空=真 ,所以你必须 使用 无布尔字段 相反。使用 现在不鼓励后者 作为 它可能在Django的未来版本中被弃用。

    在Django的早期版本中,因此不可能编写 BooleanField(null=True) ,但这种行为已经改变。

    不管使用什么,我们的想法是数据库可以存储三个可能的值: TRUE (映射到 True ), FALSE (映射到 False ),和 NULL (映射到 None ).

    注意,就像 CharField s、 你可以设定 choices 让值映射到更“感性”的显示上。

        2
  •  4
  •   neverwalkaloner    8 年前

    你可以用 NullBooleanField 为了这个。