Reputation: 30013
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?
Upvotes: 5
Views: 16989
Reputation: 156
Here is the above method adapted for NullBooleanField
:
result = models.NullBooleanField()
def get_result(self):
if self.result is None:
return None
return bool(self.result)
Upvotes: 1
Reputation: 156158
Is there a situation you anticipate that this will cause different behaviour just based on the types?
>>> 1 == True
True
>>> 0 == False
True
>>> int(True)
1
>>> int(False)
0
Upvotes: 1
Reputation: 33716
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
Upvotes: 7
Reputation: 1635
>>> 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.
Upvotes: 0