Урок 21. Доп. практикум 3 (Django): ORM-запросы

📁 Блок: Django ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#django #ORM #QuerySet #filter #Q #F #bulk_update #практикум

⚡ Кратко: Практикум 3 — Django ORM-запросы

26 задач на работу с Django ORM через Django shell: создание объектов, фильтрация, Q/F-классы, bulk_update, annotate. Система управления задачами (Task, Project, Tag, User, ProjectFile).

  • Задачи 1–6: создание данных — тэги, проекты, файлы, пользователи, задачи, M2M-связи
  • Задачи 7–12: базовые запросы — all(), filter(), exists(), icontains, дата, Q-класс
  • Задачи 13–20: продвинутые запросы — статус+приоритет, update(), exclude(), F-класс, isnull
  • Задачи 21–26: массовые операции — bulk_update, annotate(Count), комбинированная фильтрация

Топ-3 ошибки: 1) Путать .update() на QuerySet и .save() на объекте. 2) Не импортировать Q/F перед использованием. 3) Потерять объекты из прошлых задач — создавать заново в shell.

📖 О чём этот урок

Урок 21 — дополнительный практикум по Django ORM. Цель — закрепить навыки работы с QuerySet API через 26 последовательных задач в Django shell. Вся работа ведётся с системой управления задачами: модели Tag, Project, ProjectFile, User, Task.

Если что-то кажется незнакомым — загляни в Урок 20 (Практикум 5) или Урок 16 (модели).

Что закрепляем

  • Работа в Django shell: python manage.py shell
  • Создание объектов: .save(), objects.create(), objects.bulk_create()
  • ManyToMany: метод .add() на related manager
  • QuerySet API: all(), filter(), exclude(), first(), last(), count(), exists()
  • Lookups: __icontains, __gt, __gte, __lte, __isnull, __month, __in
  • Q-класс: логические операторы &, |, ~
  • F-класс: обновление через значение поля
  • Массовые операции: bulk_update(), .update() на QuerySet
  • Агрегация: annotate(Count(...))

📚 Что повторить перед изучением

🎯 Что изучать дальше