📝 Задания — Урок 31

← К оглавлению урока

⚡ Задания кратко

6 заданий по Extract* функциям и query_params. Ответы — в Решениях.

Блок 1: Функции Extract*

Задание 1 (из лекции)

Сопоставьте функции извлечения компонентов даты/времени с их описанием:

  1. ExtractMonth
  2. ExtractDay
  3. ExtractHour
  4. ExtractQuarter

A. Извлекает день из даты
B. Извлекает час из времени
C. Извлекает квартал из даты
D. Извлекает месяц из даты

Задание 2

Какой из вариантов правильно фильтрует книги, опубликованные в январе, без явного импорта функций Extract*?

  1. Book.objects.filter(published_date__month=1)
  2. Book.objects.filter(published_date=1)
  3. Book.objects.annotate(m=ExtractMonth('published_date'))
  4. Book.objects.get(month=1)
Задание 3

Из какого модуля нужно импортировать функции ExtractYear, ExtractMonth и другие?

  1. django.db.models
  2. django.db.models.functions
  3. django.utils.dates
  4. rest_framework.filters

Блок 2: Query Parameters с APIView

Задание 4 (из лекции)

Какие параметры используются для пагинации данных в примере из лекции?

  1. page
  2. limit
  3. page_size
  4. offset

(Можно выбрать несколько)

Задание 5 (из лекции)

Как называется класс, который можно использовать для добавления пагинации к APIView?

Задание 6 (из лекции)

Как получить доступ к query parameters в APIView?

  1. request.GET.get('key')
  2. request.params.get('key')
  3. request.query_params.get('key')
  4. request.data.get('key')

Блок 3: Практические задачи

Задание 7 (практика)

Напишите APIView, который принимает параметр year и возвращает все книги, опубликованные в этом году. Если параметр не передан — возвращает все книги.

Модель: Book(title, author, published_date). Используйте прямые lookups.

Задание 8 (практика)

Исправьте ошибку в коде:

class BookListView(APIView):
    def get(self, request):
        author = request.query_params.get('author')
        year = request.query_params.get('year')
        filters = {
            'author': author,
            'published_date__year': year
        }
        books = Book.objects.filter(**filters)
        return Response(BookSerializer(books, many=True).data)

Что не так и как исправить?

Посмотреть решения →