更改Django Rest Framework分页输出格式

时间:2018-09-07 21:24:57

标签: django django-rest-framework

使用DRF进行序列化和分页时,API的输出采用以下格式。

{
    "count": 4429,
    "next": "http://127.0.0.1:8000/data/component_log/?limit=100&offset=100",
    "previous": null,
    "results": [{...},{...},{...}]

}

这包括计数,下一个和上一个字段以及结果字段。

返回结果数组时,是否可以进行序列化和分页?

例如

[{...},{...},{...}]

我的序列化器

class InvoiceSerializer(serializers.ModelSerializer):

    class Meta:
        model = Invoice
        fields = '__all__'

我的ViewSet

class InvoiceViewSet(viewsets.ModelViewSet,UpdateModelMixin):

    queryset = Invoice.objects.all()
    serializer_class = InvoiceSerializer
    filter_backends = (OrderingFilter,)

无需分页,只需将以下内容添加到REST_FRAMEWORK设置中即可实现这一目标。

REST_FRAMEWORK = {
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer'
    ),
}

但这不会保留到分页的请求中。

1 个答案:

答案 0 :(得分:2)

使用Custom pagination class作为视图并覆盖get_paginated_response方法,如下所示:

from rest_framework.response import Response

class CustomPagination(pagination.PageNumberPagination):
    def get_paginated_response(self, data):
        return Response(data)