【发布时间】: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
在 Django,a boolean field in MySQL is stored as a TINYINT。当我检索它时,我得到 0 或 1。我不应该得到 False 或 True 吗?有没有办法实现这种行为?
【问题讨论】:
标签: python mysql django boolean
这里是为NullBooleanField改编的上述方法:
result = models.NullBooleanField()
def get_result(self):
if self.result is None:
return None
return bool(self.result)
【讨论】:
您是否预计这会导致仅基于类型的不同行为?
>>> 1 == True
True
>>> 0 == False
True
>>> int(True)
1
>>> int(False)
0
【讨论】:
您可以为您的模型创建自己的方法来评估它:
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
【讨论】:
>>> u=User.objects.get(pk=1)
>>> u.is_active
1
>>> u.is_active==1
True
>>>
布尔列返回 1 或 0 的原因在您问题中的链接上。
【讨论】: