Django IntegerChoices против TextChoices: изучение методов перечисления вариантов

В Django и IntegerChoices, и TextChoicesявляются классами перечисления, которые позволяют вам определить набор вариантов для определенного поля. Основное различие между ними заключается в типе данных, которые они хранят. IntegerChoicesхранит варианты выбора в виде целых чисел, а TextChoicesхранит их в виде строк.

Вот несколько методов, которые можно использовать с примерами кода:

  1. Использование 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для отображения вариантов в раскрывающемся меню.

  2. Использование 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для отображения вариантов в раскрывающемся меню.