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
- Serializer factory with Django Rest Framework by julio 3 months, 1 week ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 4 months ago
- Help text hyperlinks by sa2812 4 months, 3 weeks ago
- Stuff by NixonDash 7 months ago
- Add custom fields to the built-in Group model by jmoppel 9 months, 1 week ago