"get_paginated_response" 在 django-rest-framework 3.0 中

"get_paginated_response" in django-rest-framework 3.0

在 DRF 3.1 中,我可以这样做以获得分页响应,但似乎 get_paginated_response() 在 3.0 中不可用。什么是等效的?

class NoteList(ListCreateAPIView):

    def list(self, request, *args, **kwargs):
        queryset = self.get_queryset()
        paged_queryset = self.paginate_queryset(queryset)
        serializer = NoteSerializer(paged_queryset, many=True)
        return self.get_paginated_response(serializer.data)

它是 PaginationSerializer,通过以下方式设置序列化程序 class:

'DEFAULT_PAGINATION_SERIALIZER_CLASS': 'YourCustomPaginationSerializer'

class MyView(generics.GenericAPIView):
    pagination_serializer_class = YourCustomPaginationSerializerClass

mixin.py

def list(self, request, *args, **kwargs):
    instance = self.filter_queryset(self.get_queryset())
    page = self.paginate_queryset(instance)
    if page is not None:
        serializer = self.get_pagination_serializer(page)
    else:
        serializer = self.get_serializer(instance, many=True)
    return Response(serializer.data)

generics.py

def get_pagination_serializer(self, page):
    """
    Return a serializer instance to use with paginated data.
    """
    class SerializerClass(self.pagination_serializer_class):
        class Meta:
            object_serializer_class = self.get_serializer_class()

    pagination_serializer_class = SerializerClass
    context = self.get_serializer_context()
    return pagination_serializer_class(instance=page, context=context)

如果您正在做 migration 的事情,请不要忘记 settings.py 或视图中的分页参数,已更改为新的分页器。

比如。 PAGINATE_BY_PARAM -> page_size_query_param.

无论如何,我认为新的分页器比以前的分页器舒服多了。 在 Pagination Docs

上查看更多详情