当我在我的API上进行GET时,它总是在结果中包含以下内容:
{
"count": 2013,
"next": "http://127.0.0.1:8000/api/items/?page=2",
"previous": null,
"results": [ {...} ... {...} ]
}
如何删除count,next和previous字段,只返回结果中的内容?不过,我仍然希望将结果分页。
我在这里找到了一些东西:Django REST Framework: Directly display on results list in GenericView,但它不起作用。
答案 0 :(得分:14)
覆盖分页类的get_paginated_response
方法。
from rest_framework.pagination import PageNumberPagination
class PageNumberPaginationDataOnly(PageNumberPagination):
# Set any other options you want here like page_size
def get_paginated_response(self, data):
return Response(data)
然后在您的settings.py中,将DEFAULT_PAGINATION_CLASS
设置为新的分页类。
DEFAULT_PAGINATION_CLASS = 'path.to.PageNumberPaginationDataOnly'
此方法用于pagination docs。
中的示例答案 1 :(得分:1)
该问题的另一种解决方案是在views.py中的每个视图集中重新定义get_pagination_response
。这样就可以动态更改每个视图集。另外,请确保从rest_framework.response导入响应。
from rest_framework.response import Response
from rest_framework import viewsets
from .models import CustomModel
from .serializers import CustomSerialzer
class CustomViewSet(viewsets.ModelViewSet):
queryset = CustomModel.objects.all()
serializer_class = CustomSerializer
def get_paginated_response(self, data):
return Response(data)
我还发现了这个小瑰宝:paginator = None
只需将其粘贴在视图集的serializer_class下,它就会把您的分页显示出来,因此您可以在一页上返回所有列表项。但是,如果您有太多的记录,可能会有风险。所以要小心。