⚖️ Старый vs Новый — Урок 26
Паттерны из лекции (Django 3.x / DRF 3.x) → актуальный Django 5.x + DRF 3.15+
⚡ Главные отличия
- Агрегации и
annotate()— API не изменился, работает в Django 3–5 Subquery/OuterRef— введены в Django 1.11, актуальны в 5.x- DRF: старый
Serializerс ручными полями → современныйModelSerializer - Старые function-based views с ручным
json.dumps()→@api_view+Response
1. Агрегации — API стабилен
Методы aggregate(), annotate(), функции Count, Sum, Avg, Min, Max — API не менялся с Django 2.x. Код из лекции корректен в Django 5.x.
| Что | Статус |
|---|---|
aggregate(total=Count('id')) | Актуально, без изменений |
annotate(book_count=Count('id')) | Актуально, без изменений |
ExtractYear, ExtractQuarter | Актуально, добавлены в Django 2.0 |
2. Подзапросы — API стабилен с Django 1.11
Subquery и OuterRef введены в Django 1.11, полностью поддерживаются в Django 5.x без изменений.
# Из лекции (Django 3.x) — актуально в Django 5.x
from django.db.models import OuterRef, Subquery, Min
subquery = Book.objects.filter(
author=OuterRef('author')
).values('author').annotate(
min_price=Min('price')
).values('min_price')
books = Book.objects.annotate(min_author_price=Subquery(subquery))
# Работает без изменений в Django 5.x
3. ExpressionWrapper — стабилен, но есть нюанс
| Старый подход (лекция) | Современный подход |
|---|---|
|
|
4. DRF: сериализатор — от ручного к ModelSerializer
Лекция показывает концепцию сериализации в общем. В реальной разработке используется ModelSerializer:
| Старый (ручной Serializer) | Современный (ModelSerializer) |
|---|---|
|
|
5. DRF: представления — от ручного JSON к @api_view + Response
| Устаревший подход (Django views) | Современный (DRF @api_view) |
|---|---|
|
|
6. DRF: статус-коды — от числа к константам
| Старый (числа) | Современный (константы) |
|---|---|
|
|
Константы из rest_framework.status делают код самодокументирующимся.
7. order_by по связанным полям
В лекции встречается устаревший синтаксис без двойного подчёркивания:
| Из лекции (может не работать) | Актуальный Django 5.x |
|---|---|
|
|
⚠️ Проверить по документации: в Django 5.x добавлены новые возможности для
annotate() с условными выражениями (Case/When). Для более сложных сценариев см. официальную документацию.