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

Chr*_*son 5 django django-rest-framework

当我在我的API上进行GET时,它总是在结果中包含以下内容:

{
    "count": 2013,
    "next": "http://127.0.0.1:8000/api/items/?page=2",
    "previous": null,
    "results": [ {...} ... {...} ]
 }
Run Code Online (Sandbox Code Playgroud)

如何删除count,next和previous字段,只返回结果中的内容?不过,我仍然希望将结果分页.

我在这里找到了一些东西:Django REST框架:直接显示在GenericView中的结果列表中,但它不起作用.

Ala*_*air 16

覆盖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)
Run Code Online (Sandbox Code Playgroud)

然后在settings.py中,设置DEFAULT_PAGINATION_CLASS为新的分页类.

DEFAULT_PAGINATION_CLASS = 'path.to.PageNumberPaginationDataOnly'
Run Code Online (Sandbox Code Playgroud)

此方法用于分页文档中的示例.


Pau*_*ett 7

此问题的另一个解决方案是get_pagination_response在views.py 中的每个视图集中重新定义 。这使得您可以动态更改每个视图集。另外,请确保从rest_framework.response 导入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)
Run Code Online (Sandbox Code Playgroud)

我还发现了这个小宝石:paginator = None只需将它粘贴在视图集上的 serializer_class 下方,它就会取出分页并进行分页,以便您可以在一页上返回所有列表项。但是,如果您有太多记录,可能会存在风险。所以要小心。