5

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?

1
  • Yes, I DID read: MySQL users.. on the link provided. Commented Nov 22, 2009 at 15:12

4 Answers 4

7

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
Sign up to request clarification or add additional context in comments.

Comments

1

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

Comments

1

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)

Comments

0
>>> 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

Your example should have been: u.is_active == True
Is it possible to implicity covert the boolean fields to True or False instead of 1 or 0
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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.