Ответ
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) значительно улучшает поддержку и читаемость кода при работе с полями, имеющими ограниченный набор вариантов.