This custom model field is a variant of NullBooleanField, that stores only True and None (NULL) values. False is stored as NULL.
It's usefull for special purposes like unique/unique_together.
One small problem is here, that False is not lookuped as None.
This snippets is a response to 1830
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
from django.db.models.fields import subclassing from django.core import exceptions from django.conf import settings from django.db import models class TrueNoneField(models.NullBooleanField): __metaclass__ = subclassing.SubfieldBase def db_type(self): if 'postgresql' in settings.DATABASE_ENGINE: return "boolean CHECK (%s <> false)" % self.get_attname_column() else: return super(TrueNoneField, self).db_type() def to_python(self, value): if value in (True, 1): return True elif value in (False, 0, None): return None raise exceptions.ValidationError("This value must be either True or None.") def get_db_prep_save(self, value): return super(TrueNoneField, self).get_db_prep_save(self.to_python(value))
More like this
- "Magic Link" Management Command by webology 4 months, 2 weeks ago
- Closest ORM models to a latitude/longitude point by simonw 4 months, 2 weeks ago
- Log the time taken to execute each DB query by kennyx46 4 months, 2 weeks ago
- django database snippet by ItsRLuo 4 months, 2 weeks ago
- Serialize a model instance by chriswedgwood 5 months, 2 weeks ago