- Перечисления (
Enumeration classes)- Способ определить поле модели с ограниченным набором значений, используя читаемые имена вместо “магических” чисел или строк.
- Используются
models.TextChoicesилиmodels.IntegerChoices. - Преимущества: Понятный код, удобство в админке (отображаются метки), автоматическая генерация атрибутов (
.choices,.labels,.values). - Пример:
# models.py from django.db import models class Post(models.Model): # Определение перечисления внутри модели class Status(models.TextChoices): DRAFT = 'DF', 'Черновик' # Значение в БД, Метка для отображения PUBLISHED = 'PB', 'Опубликовано' ARCHIVED = 'AR', 'В архиве' title = models.CharField(max_length=100) # Использование перечисления в поле status = models.CharField( max_length=2, choices=Status.choices, # Используем .choices для Django default=Status.DRAFT # Используем имя члена для значения по умолчанию ) # ... def __str__(self): return self.title - Доступные атрибуты перечисления:
Status.values: Список значений (['DF', 'PB', 'AR']).Status.labels: Список меток (['Черновик', 'Опубликовано', 'В архиве']).Status.choices: Список кортежей(значение, метка)([('DF', 'Черновик'), ...]).Status.names: Список имен (['DRAFT', 'PUBLISHED', 'ARCHIVED']).
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰