📝 Задания — Урок 26
⚡ Задания — быстрый список
- Сопоставьте функции агрегации (Count/Sum/Avg/Min/Max) с описаниями
- Как сортировать по убыванию в order_by?
- Какой класс используется для подзапроса?
- Что такое OuterRef?
- Что такое сериализация в DRF?
Ответы: смотрите решения
Задания из лекции — блок «Агрегация»
Задание 1.1 — Сопоставление функций агрегации
Сопоставьте функции агрегации с их описанием:
| # | Функция | Описание |
|---|---|---|
| 1 | Count | A. Вычисляет сумму значений указанного поля |
| 2 | Sum | B. Подсчитывает количество записей в QuerySet |
| 3 | Avg | C. Нахождение минимального значения указанного поля |
| 4 | Min | D. Вычисляет среднее значение указанного поля |
| 5 | Max | E. Нахождение максимального значения указанного поля |
Задание 1.2 — aggregate vs annotate
Что вернёт следующий код? Объясните разницу между двумя вызовами:
# Вызов A
result_a = Book.objects.aggregate(total=Count('id'))
# Вызов B
result_b = Book.objects.values('author').annotate(cnt=Count('id'))
Задания из лекции — блок «order_by и срезы»
Задание 2.1
Как сортировать объекты QuerySet по полю в обратном порядке?
- A. Использовать
order_by(field_name) - B. Использовать
order_by(-field_name) - C. Использовать
order_by('-field_name')
Задание 2.2 — Срезы
Напишите запрос, который возвращает 10 самых дорогих книг, отсортированных по цене по убыванию, пропуская первые 5 (то есть места 6–15).
Задания из лекции — блок «Подзапросы»
Задание 3.1
Какой класс используется для включения результатов одного QuerySet в другой запрос в качестве подзапроса?
- A.
OuterRef - B.
Subquery - C.
Avg
Задание 3.2
Какую функцию можно использовать для ссылок на поля из внешнего запроса внутри подзапроса?
- A.
OuterRef - B.
Subquery - C.
ExpressionWrapper
Задание 3.3 — Сопоставление классов
Сопоставьте классы и методы с описаниями:
| # | Класс | Описание |
|---|---|---|
| 1 | ExpressionWrapper | A. Включает результаты одного QuerySet в другой запрос |
| 2 | Avg | B. Ссылается на поля из внешнего запроса внутри подзапроса |
| 3 | Subquery | C. Оборачивает сложные выражения, чтобы указать тип данных результата |
| 4 | OuterRef | D. Вычисляет среднее значение поля |
Задания из лекции — блок «DRF»
Задание 4.1
Что такое сериализация в контексте Django REST Framework (DRF)?
- A. Процесс преобразования простых форматов данных в сложные структуры
- B. Процесс преобразования сложных структур данных в простые форматы
- C. Процесс проверки данных на сервере
Задание 4.2
Какая из следующих функций НЕ является частью Django REST Framework?
- A. Сериализаторы
- B. Представления (Views)
- C. Модели базы данных
Практические задания
Задание 5.1 — Написать запрос
Используя модель Book (поля: title, author, price, publisher), напишите запрос, который:
- Считает количество книг у каждого издателя
- Возвращает только издателей с более чем 3 книгами
- Сортирует по количеству книг по убыванию
Задание 5.2 — DRF минимальный сериализатор
Напишите TaskSerializer на основе ModelSerializer для модели:
class Task(models.Model):
title = models.CharField(max_length=200)
description = models.TextField(blank=True)
status = models.CharField(max_length=20, default='todo')
deadline = models.DateField(null=True)
created_at = models.DateTimeField(auto_now_add=True)
Сериализатор должен: включать все поля, сделать id и created_at read-only.