MySQL Django模型中的布尔字段?

时间:2009-11-22 15:02:36

标签: python mysql django boolean

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

4 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:1)

以上适用于NullBooleanField的方法:

result = models.NullBooleanField()

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

答案 2 :(得分:1)

是否存在一种情况,您预计这会导致基于类型的不同行为?

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

答案 3 :(得分:0)

>>> u=User.objects.get(pk=1)
>>> u.is_active
1
>>> u.is_active==1
True
>>>

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