Django Custom Field - Boolean -> CHAR YN
Из-за унаследованной системы я пытаюсь заставить булевые поля Django сохраняться в dB как простое поле 'Y' или 'N' char (VARCHAR не поддерживается в указанной унаследованной системе).
Использование пользовательского поля django У меня оно работает, но я пытаюсь заставить Django admin работать с полем.
class BooleanYN(models.BooleanField):
""" We need to save boolean variables as CHAR Y/N
"""
description = _("Boolean field stored as Y or N in the dB")
def from_db_value(self, value, expression, connection):
if value in ('Y', 'y'):
return True
if value in ('N', 'n'):
return True
raise ValidationError(_(f"Value in dB is not Y or N - {value}"))
def get_prep_value(self, value):
if value is True:
return 'Y'
if value is False:
return 'N'
return value
def db_type(self, connection):
return char(1)
В админке Django, вид одной записи + вид списка, виджет checkbox всегда отмечается как true, хотя 'N' правильно сохраняется в dB, и "to_python" правильно передается 'False' или 'True' как значение, когда его вызывает код modelform в зависимости от того, 'Y' или 'N' в dB.
Любая помощь приветствуется!
Я провел так много времени, сосредоточившись на исходном коде Django, что пропустил глупую ошибку в своем собственном коде, которую я скрыл от себя с помощью недопустимого протоколирования!
Changed :
def from_db_value(self, value, expression, connection):
if value in ('Y', 'y'):
return True
if value in ('N', 'n'):
return True
raise ValidationError(_(f"Value in dB is not Y or N - {value}"))
к :
def from_db_value(self, value, expression, connection):
if value in ('Y', 'y'):
return True
if value in ('N', 'n'):
return False
raise ValidationError(_(f"Value in dB is not Y or N - {value}"))
После этого проблем больше нет. Спасибо за ваш ответ nigel222