从Django REST框架中的响应中删除count,next,previous

时间:2015-08-23 19:09:19

标签: django django-rest-framework

当我在我的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,但它不起作用。

2 个答案:

答案 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下,它就会把您的分页显示出来,因此您可以在一页上返回所有列表项。但是,如果您有太多的记录,可能会有风险。所以要小心。