Урок 33. Основы Django REST Framework: часть 3

📁 Блок: DRF ⏱️ Время изучения: ~70 мин 🎯 Сложность: Средняя
#drf #lookup-field #get-object #serializer-context #filter-backends #search #ordering

⚡ Кратко: DRF часть 3

Урок охватывает четыре продвинутые возможности Generic Views: настройка идентификации объектов через lookup_field/lookup_url_kwarg, переопределение get_object() для кастомной фильтрации, передача дополнительного контекста сериализатору через get_serializer_context(), и автоматическая фильтрация/поиск/сортировка через filter_backends.

  • lookup_field: поле модели для поиска объекта (по умолчанию pk)
  • lookup_url_kwarg: параметр URL для получения значения lookup_field
  • get_object(): переопределить для кастомной логики поиска/фильтрации
  • get_serializer_context(): передать параметры запроса в сериализатор
  • filter_backends: список классов фильтрации — DjangoFilterBackend, SearchFilter, OrderingFilter
  • filterset_fields / search_fields / ordering_fields: настройка конкретных полей

Топ-3 ошибки: 1) Забыть добавить django_filters в INSTALLED_APPS после pip install django-filter. 2) Не вызвать super().get_serializer_context() — теряются request, view, format. 3) Установить lookup_url_kwarg без совпадающего параметра <str:...> в URL-шаблоне.

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

Урок 33 продолжает изучение Django REST Framework и посвящён тонкой настройке Generic Views. Разбираются четыре механизма, которые делают API гибким и удобным без написания лишнего кода.

Первая часть — атрибуты lookup_field и lookup_url_kwarg, позволяющие идентифицировать объекты по произвольному полю (не только по pk). Вторая — переопределение метода get_object() для добавления кастомной логики: фильтрации запрещённых объектов, мягкого удаления, дополнительных проверок. Третья — метод get_serializer_context(), позволяющий передавать в сериализатор параметры запроса и другие данные. Четвёртая — атрибут filter_backends с тремя бэкендами: фильтрация по полям, текстовый поиск и сортировка.

Что изучим

  • lookup_field — идентификация объекта по нестандартному полю
  • lookup_url_kwarg — связь параметра URL с полем модели
  • get_object() — переопределение для фильтрации и обработки ошибок
  • get_serializer_context() — контекст сериализатора и динамические поля
  • filter_backends — DjangoFilterBackend, SearchFilter, OrderingFilter
  • filterset_fields, search_fields, ordering_fields — настройка полей
  • Примеры параметров запроса: ?author=..., ?search=..., ?ordering=price

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

  • ← Урок 32: Summary session 6 — повторение DRF-блока
  • DRF Generic Views: ListCreateAPIView, RetrieveUpdateDestroyAPIView (урок 29)
  • Сериализаторы ModelSerializer, метод to_representation (урок 26)
  • Django ORM: get(), filter(), исключения DoesNotExist (уроки 16, 19)
  • HTTP query parameters: request.query_params

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