В Django и IntegerChoices
, и TextChoices
являются классами перечисления, которые позволяют вам определить набор вариантов для определенного поля. Основное различие между ними заключается в типе данных, которые они хранят. IntegerChoices
хранит варианты выбора в виде целых чисел, а TextChoices
хранит их в виде строк.
Вот несколько методов, которые можно использовать с примерами кода:
-
Использование
IntegerChoices
:from django.db import models from django.utils.translation import gettext_lazy as _ class StatusChoices(models.IntegerChoices): PENDING = 1, _('Pending') APPROVED = 2, _('Approved') REJECTED = 3, _('Rejected') class MyModel(models.Model): status = models.IntegerField(choices=StatusChoices.choices)
В этом примере класс
StatusChoices
определяет три варианта выбора для поляstatus
, представленные целыми числами 1, 2 и 3.choices
используется вIntegerField
для отображения вариантов в раскрывающемся меню. -
Использование
TextChoices
:from django.db import models from django.utils.translation import gettext_lazy as _ class StatusChoices(models.TextChoices): PENDING = 'pending', _('Pending') APPROVED = 'approved', _('Approved') REJECTED = 'rejected', _('Rejected') class MyModel(models.Model): status = models.CharField(max_length=20, choices=StatusChoices.choices)
В этом примере класс
StatusChoices
определяет те же три варианта выбора, но они представлены в виде строк. Атрибутchoices
используется вCharField
для отображения вариантов в раскрывающемся меню.