Создайте собственный класс BooleanField, который расширяется от моделей. BooleanField.В следующем классе истинные значения сохраняются с -1 в БД.
class AccessCompatibleBooleanField(models.BooleanField):
def to_python(self, value):
if value == True:
return -1
if value == False:
return False
if value in ('t', 'True', '1', '-1'):
return -1
if value in ('f', 'False', '0'):
return False
raise exceptions.ValidationError(self.error_messages['invalid'])
Если вы хотите сделать фильтры, такие как .filter (visibles = True) и visibles, это пользовательское логическое поле, вы должны добавить следующий методв ваш пользовательский класс.
def get_prep_value(self, value):
if value is None:
return None
b = bool(value)
if b:
return -1
return b