【问题标题】:Boolean fields in MySQL Django Models?MySQL Django 模型中的布尔字段?
【发布时间】:2010-12-19 05:37:23
【问题描述】:

在 Django,a boolean field in MySQL is stored as a TINYINT。当我检索它时,我得到 0 或 1。我不应该得到 False 或 True 吗?有没有办法实现这种行为?

【问题讨论】:

  • 是的,我确实在提供的链接上阅读了:MySQL 用户。

标签: python mysql django boolean


【解决方案1】:

这里是为NullBooleanField改编的上述方法:

result = models.NullBooleanField()

def get_result(self):
    if self.result is None:
        return None
    return bool(self.result)

【讨论】:

    【解决方案2】:

    您是否预计这会导致仅基于类型的不同行为?

    >>> 1 == True
    True
    >>> 0 == False
    True
    >>> int(True)
    1
    >>> int(False)
    0
    

    【讨论】:

      【解决方案3】:

      您可以为您的模型创建自己的方法来评估它:

      class User(models.Model):
          active_status = models.BooleanField(default=1)
      
          def is_active(self):
              return bool(self.active_status)
      

      那么您对该字段执行的任何测试都可以只引用该方法:

      >>> u.is_active()
      True
      

      你甚至可以把它变成一个属性:

      class User(models.Model):
          active_status = models.BooleanField(default=1)
      
          @property    
          def is_active(self):
              return bool(self.active_status)
      

      这样该类的用户甚至不必知道它是作为方法实现的:

      >>> u.is_active
      True
      

      【讨论】:

        【解决方案4】:
        >>> u=User.objects.get(pk=1)
        >>> u.is_active
        1
        >>> u.is_active==1
        True
        >>>
        

        布尔列返回 1 或 0 的原因在您问题中的链接上。

        【讨论】:

        • 你的例子应该是:u.is_active == True
        • 是否可以将布尔字段隐式转换为 True 或 False 而不是 1 或 0
        • Juanjo,我以如何实现 True 或 False 结果为例。 Rama,我想通过修改Django的模型代码应该可以,但我不知道这样的解决方案。
        猜你喜欢
        • 2018-11-20
        • 1970-01-01
        • 2022-10-05
        • 2019-09-03
        • 1970-01-01
        • 1970-01-01
        • 2022-08-14
        • 2021-10-26
        • 2015-01-24
        相关资源
        最近更新 更多