Урок 27. Практикум 6: Агрегация, сортировка, временные метки и срезы

📁 Блок: DRF ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#django #orm #aggregate #annotate #order_by #срезы #практикум

⚡ Кратко: Практикум 6 — продвинутые ORM-запросы

15 практических задач на четыре темы Django ORM: агрегация (Sum, Avg, Min, Max, Count, ExpressionWrapper), сортировка order_by, фильтрация по временным меткам и срезы QuerySet. Модели: Product, Category, Supplier, ProductDetail, Order, OrderItem, Customer, Address.

  • Агрегация (8 задач): Sum(F*F), Avg, Min/Max, Count, ExpressionWrapper(DurationField), values().annotate()
  • order_by (4 задачи): сортировка по цене, annotate+order_by, многополевая сортировка, Count+order_by
  • Временные метки (1 задача): timezone.now() - timedelta(days=30), filter(__gte=)
  • Срезы (2 задачи): QuerySet[:5], order_by('-price')[:10]

Топ-3 ошибки: 1) Забыть output_field=fields.DurationField() в ExpressionWrapper. 2) Путать aggregate() и annotate(). 3) Пробовать применить срез к QuerySet после order_by('-price') без обёртки в список.

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

Урок 27 — практикум 6 по Django ORM. Задачи взяты из лекции «Django Practicum 6». Новый теоретический материал не вводится — только практика на моделях интернет-магазина (Product, Category, Supplier, Order, OrderItem, Customer, Address, ProductDetail).

Если нужно освежить теорию — загляни в Урок 26 (ORM ч.2 + основы DRF).

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

  • Агрегация: Sum(F('price') * F('quantity')), Avg, Min, Max, Count
  • Группировка: values('category__name').annotate(...)
  • Вычисляемые поля: ExpressionWrapper(F('expiration_date') - F('manufacturing_date'), output_field=fields.DurationField())
  • Сортировка: order_by('-price'), многополевая сортировка, сортировка по аннотированному полю
  • Временные метки: timezone.now() - timezone.timedelta(days=30)
  • Срезы QuerySet: [:5], [:10] — аналог SQL LIMIT

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

  • ← Урок 26: ORM запросы ч.2 + основы DRF
  • Django shell: python manage.py shell
  • QuerySet: filter(), values(), annotate(), aggregate()
  • F-объекты: арифметика на уровне базы данных
  • Модели store: Product, Category, Order, OrderItem, Customer

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