📝 Django

Choices в Django моделях

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
1 мин
👁️
Просмотров
74
🌿
Уровень
Средний
🐦 💼 ✈️

TextChoices предпочтительнее — даёт автодополнение и избегает магических строк.

TextChoices / IntegerChoices

from django.db import models

class Task(models.Model):
    class Status(models.TextChoices):
        TODO = 'todo', 'К выполнению'
        IN_PROGRESS = 'in_progress', 'В процессе'
        DONE = 'done', 'Выполнено'

    class Priority(models.IntegerChoices):
        LOW = 1, 'Низкий'
        MEDIUM = 2, 'Средний'
        HIGH = 3, 'Высокий'

    status = models.CharField(
        max_length=20,
        choices=Status,
        default=Status.TODO,
    )
    priority = models.IntegerField(
        choices=Priority,
        default=Priority.MEDIUM,
    )

Использование choices

# Создание
task = Task.objects.create(status=Task.Status.TODO, priority=Task.Priority.HIGH)

# Фильтрация
Task.objects.filter(status=Task.Status.DONE)

# Читаемое значение
task.get_status_display()  # 'К выполнению'
task.get_priority_display()  # 'Высокий'

# Перебор вариантов
for value, label in Task.Status.choices:
    print(value, label)

В шаблоне

<span>{{ task.get_status_display }}</span>

<select name="status">
  {% for value, label in status_choices %}
    <option value="{{ value }}">{{ label }}</option>
  {% endfor %}
</select>

Старый стиль (без enum)

STATUS_CHOICES = [
    ('todo', 'К выполнению'),
    ('done', 'Выполнено'),
]
status = models.CharField(choices=STATUS_CHOICES, max_length=20)

TextChoices предпочтительнее — даёт автодополнение и избегает магических строк.

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

pytest-django: тестирование Django

Охватываемые темы: Установка, @pytest.mark.djangodb, Фикстуры, Тестирование views.

📅 30.06.2026 👁️ 138
📝

Django: Теги шаблонов

Теги шаблонов — это логика внутри HTML. В отличие от {{ переменная }}, которая только...

📅 30.06.2026 👁️ 87
📝

Django: Статические файлы

Статические файлы — CSS, JavaScript, изображения, шрифты. Django обрабатывает их особым образом: в разработке раздаёт...

📅 30.06.2026 👁️ 79

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!