✅ Решения — Урок 33
⚡ Ответы
- Вопрос 1: 1-c, 2-a, 3-b, 4-d
- Вопрос 2: a, b
- Вопрос 3: c
- Вопрос 4: d
- Вопрос 5: a
- Вопрос 6: a
- Вопрос 7: c
- Вопрос 8: a
Блок 1: Атрибуты lookup и методы GenericAPIView
Вопрос 1 — Ответ: 1-c, 2-a, 3-b, 4-d
- 1 (lookup_field) → c — «Указывает поле модели, которое будет использоваться для поиска объекта». lookup_field определяет, по какому полю модели DRF будет искать объект при обработке запросов к конкретному ресурсу.
- 2 (lookup_url_kwarg) → a — «Определяет параметр URL, который будет использоваться для получения значения lookup_field». lookup_url_kwarg связывает параметр из URL-шаблона (
<str:genre_name>) с полем модели. - 3 (get_object) → b — «Возвращает один объект из набора данных, используя параметры URL для фильтрации». Метод извлекает единственный объект и может быть переопределён для кастомной логики.
- 4 (get_serializer_context) → d — «Возвращает контекст, передаваемый сериализатору». Контекст позволяет передать в сериализатор дополнительную информацию: текущий запрос, параметры, флаги.
Вопрос 2 — Ответ: a, b
- a) Верно — lookup_field действительно указывает поле модели для поиска.
- b) Верно — lookup_url_kwarg определяет параметр URL для значения lookup_field.
- c) Неверно — если
lookup_fieldне задан, используется значение по умолчанию'pk', а неlookup_url_kwarg. - d) Неверно —
lookup_url_kwargне обязателен: если не задан, он равен значениюlookup_field.
Вопрос 3 — Ответ: c
c) «Возвращает один объект из набора данных, используя параметры URL для фильтрации» — это основное назначение get_object(). Метод использует lookup_field и значение из URL для поиска конкретного объекта в queryset.
Варианты a) и b) описывают lookup_url_kwarg и lookup_field соответственно. Вариант d) описывает get_serializer_context().
Вопрос 4 — Ответ: d
d) «Возвращает контекст, передаваемый сериализатору» — точное назначение get_serializer_context(). Контекст — словарь с ключами request, format, view (и любыми добавленными пользователем данными).
Блок 2: filter_backends
Вопрос 5 — Ответ: a
a) «Определяет, какие фильтры будут применяться к данным в представлении» — основная функция filter_backends. Это список классов фильтрации, которые DRF последовательно применяет к queryset.
- b) Неверно — количество элементов на странице настраивается через
pagination_classиpage_size. - c) Неверно —
filter_backendsприменяет фильтры к уже выбранным данным, а не управляет базой данных напрямую. - d) Неверно — формат ответа задаётся через
renderer_classes.
Вопрос 6 — Ответ: a
a) search_fields и ordering_fields — search_fields определяет поля для текстового поиска (параметр ?search=), ordering_fields — поля для сортировки (параметр ?ordering=).
Вопрос 7 — Ответ: c
c) filterset_fields — атрибут, который определяет список полей модели для точной фильтрации через DjangoFilterBackend. Клиент передаёт ?field=value для фильтрации по этим полям.
get_queryset() (вариант d) — это метод для возврата базового queryset, но он не реализует автоматическую фильтрацию сам по себе.
Вопрос 8 — Ответ: a
a) «Указывает поля для сортировки данных» — параметр ?ordering=field указывает, по какому полю сортировать результаты. Минус перед именем поля (?ordering=-price) означает сортировку по убыванию.