我正在使用 Django 和 Django rest 框架构建 API,我正在尝试在 json 结果中添加页码。我正在尝试在返回的结果中添加页码,例如,我目前正在获取此信息;
{
"links": {
"next": null,
"previous": null
},
"count": 1,
"results": [
{
"url": "http://127.0.0.1:8000/api/brands/1/?format=json",
"name": "microsoft",
"description": "Nothing",
"top_brand": true,
"guid": "microsoft"
}
]
}
但我正试图得到这样的东西;
{
"count": 1,
"results": [
{
"url": "http://127.0.0.1:8000/api/brands/1/?format=json",
"name": "microsoft",
"description": "Nothing",
"top_brand": true,
"guid": "microsoft"
},
...
],
"page_number": 1,
"from": 1,
"to": 10,
"last_page": 4
}
最重要的属性是 page_number,但我不太确定如何使用 self...
从父类中获取它,除了使用函数外,我看不到任何直接的方法。这是我的代码;
class StandardResultsSetPagination(PageNumberPagination):
page_size = 100
page_size_query_param = 'page_size'
max_page_size = 1000
def get_paginated_response(self, data):
return Response({
'links': {
'next': self.get_next_link(),
'previous': self.get_previous_link()
},
'count': self.page.paginator.count,
'results': data,
'page_number': self.page.paginator...,
})
最佳答案
您可以在 View 集中使用自定义分页并在自定义 View 上更改
分页.py
class CustomPageNumber(pagination.PageNumberPagination):
page_size = 2
def get_paginated_response(self, data):
return Response(OrderedDict([
('lastPage', self.page.paginator.count),
('countItemsOnPage', self.page_size),
('current', self.page.number),
('next', self.get_next_link()),
('previous', self.get_previous_link()),
('results', data)
]))
在你看来
class TestViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Test.objects.all().order_by('-created_at')
serializer_class = TestSerializer
@list_route(methods=['get'], url_path='get-records/(?P<pk>[^/]+)')
def get_record(self, request, pk):
self.pagination_class = CustomPageNumber
queryset = self.filter_queryset(self.queryset.filter(course=pk))
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
你需要在你的settings.py中配置
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'my_project.apps.core.pagination.CustomPageNumber',
'PAGE_SIZE': 100
}
如果您想了解更多信息,请参阅文档 custom-pagination-class
关于python - Django Rest Framework 使用 PageNumberPagination 类添加页码属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46626994/