Почему Django Rest Framework Pagination работает с Django.http JsonResonse(), а не с rest_framework.response Response()

Я следовал руководству по включению/созданию пользовательской пагинации для ModelViewSets в Django Rest Framework (DRF). Но пользовательская пагинация не отображается как часть содержимого ответа. Я получаю только результаты, разбитые в соответствии с настройками 'PAGE_SIZE' в объекте с меткой data без подсчета, или page_size, как определено в моем классе пользовательской пагинации.

Я добавил следующие строки в файл setting.py:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'core.pagination.CustomPagination',
    'PAGE_SIZE': 2,
    ...
}

Пользовательский класс пагинации:

from rest_framework import pagination
from rest_framework.response import Response

class CustomPagination(pagination.PageNumberPagination):
    page_size = 2
    def get_paginated_response(self, data):
        return JsonResponse({
            'page_size': self.page_size,
            'count': self.page.paginator.count,
            'results': data
        })

Мой ModelViewSet

class PersonViewSet(viewsets.ReadOnlyModelViewSet):
    """
    A simple ViewSet for listing or retrieving and creating people.
    """
    queryset = Person.objects.all()
    permission_classes = (IsAuthenticated,)
    serializer_class = PersonSerializer
    pagination_class = CustomPagination

Я пробовал менять ModelViewSet на различные другие типы, такие как genericViewSet и определять свои list() функции и т.д.

Результаты от конечной точки API списка, которые я ожидал:

{
  "page_size": 2,
  "count": 2548,
  "results": [
    {
       "type": "Person"
    },
    {
       "type": "Person"
    }
  ]
}

Результаты от конечной точки API списка, которые я получил:

{
  "data": [
      {
        "type": "Person"
      }
      },
      {
        "type": "Person"
      }
    }
  ]
}

Когда я попробовал изменить тип ответа в классе CustomPagination на JsonResponse, я получил ожидаемый результат. Почему так?

Changed CustomPagination Class:

from rest_framework import pagination
from django.http import JsonResponse

class CustomPagination(pagination.PageNumberPagination):
    page_size = 2
    def get_paginated_response(self, data):
        return JsonResponse({
            # 'page': self.page.paginator.page,
            'page_size': self.page_size,
            'count': self.page.paginator.count,
            'results': data
        })
Вернуться на верх