Почему 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
})