class MyTypes(TextChoices):
MINE_AAA = '1', 'a',
MINE_BBB = '2', 'b',
MINE_CCC = '3', 'c',
MINE_DDD = '4', 'd',
MINE_EEE = '5', 'e'
my_type = models.CharField(max_length=1, choices=MyTypes.choices)
Я много боролся с возможностью использовать Choices в своих моделях. В приведенном выше примере, если я создаю экземпляр «my_obj» и устанавливаю для «my_obj.my_type» значение «MyTypes.MINE_BBB», если я смотрю на «my_obj», его тип будет MyTypes. Однако, если я позже запрошу «my_obj» и посмотрю на «my_obj.my_type», его тип станет строкой.
Итак, когда я сначала создаю объект и сериализую его, сериализатор должен обрабатывать MyTypes, но если я сериализую значение после запроса, сериализатору потребуется обработать строку.
При использовании поля TextChoices я действительно ожидал, что значение, хранящееся в базе данных, будет единственным символом, но когда Я ссылаюсь на него в коде, я бы увидел свои MyTypes.
Разве мы не должны возвращать экземпляр TextChoices, когда мы ссылаемся на модель? Если нет, то как это проще всего получить? Похоже, что если я после итеративно просмотрю MyTypes.choices, чтобы получить его, он действительно не принесет особой ценности.
Вот как выглядит документация.
class YearInSchool(models.TextChoices):
FRESHMAN = 'FR', _('Freshman')
SOPHOMORE = 'SO', _('Sophomore')
JUNIOR = 'JR', _('Junior')
SENIOR = 'SR', _('Senior')
GRADUATE = 'GR', _('Graduate')