Для чего в Django используется класс IntegerChoices?

Ответ

IntegerChoices — это класс-перечисление (enumeration), представленный в Django 3.0, для создания читаемых и удобных наборов целочисленных констант. Он используется для полей модели, где нужно хранить одно из нескольких предопределенных целочисленных значений.

Основное преимущество — это замена традиционных кортежей для choices на более структурированный и объектно-ориентированный подход.

Пример использования в модели:

from django.db import models

class Article(models.Model):
    class Status(models.IntegerChoices):
        DRAFT = 0, 'Черновик'
        PUBLISHED = 1, 'Опубликовано'
        ARCHIVED = 2, 'В архиве'

    title = models.CharField(max_length=200)
    status = models.IntegerField(
        choices=Status.choices, 
        default=Status.DRAFT
    )

    def __str__(self):
        return self.title

Ключевые особенности:

  • Читаемость: Код article.status = Article.Status.PUBLISHED гораздо понятнее, чем article.status = 1.
  • Доступ к атрибутам: Можно легко получить значение, имя или метку:
    • Article.Status.PUBLISHED -> 1 (значение для БД)
    • Article.Status.PUBLISHED.name -> 'PUBLISHED'
    • Article.Status.PUBLISHED.label -> 'Опубликовано'
  • Автогенерация choices: Атрибут .choices автоматически создает список кортежей, необходимый для поля модели Django.
  • Итерация: Класс можно итерировать, получая все доступные варианты.

Таким образом, IntegerChoices (и его аналог TextChoices) значительно улучшает поддержку и читаемость кода при работе с полями, имеющими ограниченный набор вариантов.