At Django, a boolean field in MySQL is stored as a TINYINT. When I retrieve it, I get 0 or 1. Shouldn't I get False or True? Is there a way to achieve this behaviour?
4 Answers
You could create your own method for your model that evaluates this for you:
class User(models.Model):
active_status = models.BooleanField(default=1)
def is_active(self):
return bool(self.active_status)
Then any tests you perform against this field could just reference the method instead:
>>> u.is_active()
True
You can even make this into a property:
class User(models.Model):
active_status = models.BooleanField(default=1)
@property
def is_active(self):
return bool(self.active_status)
so that users of the class don't even have to know that it's implemented as a method:
>>> u.is_active
True
Comments
>>> u=User.objects.get(pk=1)
>>> u.is_active
1
>>> u.is_active==1
True
>>>
The reasons why boolean columns return 1 or 0 are on the link in your question.
3 Comments
Juanjo Conti
Your example should have been: u.is_active == True
Rama Vadakattu
Is it possible to implicity covert the boolean fields to True or False instead of 1 or 0
fest
Juanjo, I listed that as an example how to achieve True or False result. Rama, I guess it should be possible by modifying Django's model code, but I'm not aware of such solution.