Моя ситуация похожа, но устаревшие данные последовательно используют Y и N для представления True и False, но у меня есть проблема с добавлением некоторых полей, допускающих Null.Итак, вот мои пользовательские типы полей.Я думаю, что это немного более полные примеры того, что вы можете сделать в этой ситуации, и я также унаследовал от типов BooleanField, которые, я думаю, лучше подходят для отображения / редактирования этих полей в формах.
from django.db import models
class YNBooleanField(models.BooleanField):
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 1
super(YNBooleanField, self).__init__(*args, **kwargs)
def to_python(self, value):
if value in ('Y', 'y'):
return True
elif value in ('N', 'n'):
return False
else:
raise ValueError
def get_prep_value(self, value):
if value:
return 'Y'
else:
return 'N'
class NullYNBooleanField(models.NullBooleanField):
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 1
super(NullYNBooleanField, self).__init__(*args, **kwargs)
def to_python(self, value):
if value is None:
return None
elif value in ('Y', 'y'):
return True
elif value in ('N', 'n'):
return False
else:
raise ValueError
def get_prep_value(self, value):
if value is None:
return None
elif value:
return 'Y'
else:
return 'N'