Урок 26. ORM запросы ч.2 + Основы Django REST Framework
⚡ Кратко: продвинутые ORM + введение в DRF
Урок делится на две части: продвинутые ORM-запросы (агрегация, подзапросы, ExpressionWrapper) и первое знакомство с Django REST Framework — установка, сериализаторы, зачем нужен DRF.
- aggregate(): возвращает словарь —
Book.objects.aggregate(total=Count('id'), avg=Avg('price')) - annotate(): добавляет вычисленное поле к каждому объекту QuerySet
- order_by() / срезы: сортировка и
QuerySet[start:stop]— аналог LIMIT/OFFSET - Subquery + OuterRef: встроенный подзапрос со ссылкой на внешний запрос
- ExpressionWrapper: обёртка для сложных арифметических выражений с явным
output_field - DRF:
pip install djangorestframework, добавить'rest_framework'вINSTALLED_APPS
Что запомнить: aggregate() — одно значение для всего QuerySet; annotate() — вычисленное поле для каждого объекта.
Топ-3 ошибки: 1) Путать aggregate и annotate. 2) Забыть output_field в ExpressionWrapper. 3) Не добавить 'rest_framework' в INSTALLED_APPS.
📖 О чём этот урок
Урок 26 открывает блок DRF и состоит из двух логических частей. В первой части разбираются продвинутые возможности Django ORM: агрегация и аннотация данных, сортировка, ограничение выборки срезами, подзапросы с Subquery/OuterRef, обёртка сложных выражений через ExpressionWrapper и фильтрация по временным меткам. Во второй части вводится Django REST Framework — что это такое, почему его используют и как подключить к проекту.
Что изучим
- Агрегационные функции:
Count,Sum,Avg,Min,Max - Методы
aggregate()иannotate()— разница и применение - Метод
order_by()— сортировка по одному и нескольким полям, по связанным таблицам - Срезы QuerySet — аналог LIMIT/OFFSET в SQL
- Подзапросы: классы
SubqueryиOuterRef ExpressionWrapper— обёртка арифметических выражений с явным типом результата- Фильтрация по временным меткам с
timezone - Что такое Django REST Framework и зачем он нужен
- Установка DRF и подключение к Django-проекту
- Сериализация и десериализация данных в DRF
📚 Что повторить перед изучением
- ← Урок 25: Summary session 5 — повторение блока Django
- ORM-запросы Django:
filter(),exclude(), классQ,F-объекты (урок 22) - Модели Django: поля, связи ForeignKey/M2M (уроки 16, 19)
- HTTP-методы: GET, POST, PUT, DELETE (урок 01)
- JSON как формат обмена данными
🎯 Что изучать дальше
- → Урок 27: Практикум 6 — DRF на практике
- ModelSerializer и Serializer — различия и когда что использовать
- APIView и @api_view — базовые классы представлений
- Response и status — правильные HTTP-ответы
- Router и ViewSet — автоматическая маршрутизация