【问题标题】:How do get custom pagination class working for django rest framework v3.6如何让自定义分页类适用于 django rest framework v3.6
【发布时间】:2018-01-06 03:04:56
【问题描述】:

我正在尝试根据the docs 在 ViewSet 上实现自定义分页类,但分页设置并没有做任何事情。这是我的 ViewSet 的代码。

from rest_framework import status, permissions, viewsets
from rest_framework.pagination import PageNumberPagination

class ProductViewSetPagination(PageNumberPagination):
    page_size = 5
    page_size_query_param = 'page_size'
    max_page_size = 1000

class ProductViewSet(viewsets.ModelViewSet):

    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = ProductSerializer
    pagination_class = ProductViewSetPagination
    # ...

    def list(self, request):
        #get_queryset is also overridden to accept filters in query_params
        queryset = self.get_queryset()
        if not queryset.exists():
            return Response(status=status.HTTP_204_NO_CONTENT)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

我什至在 settings.py 文件中添加了一些默认值,但我仍然在 product-list 视图的单个页面上获取所有产品实例。我尝试将pagepage_size 查询参数添加到URL;这不会改变任何事情。

'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,

我错过了什么?

【问题讨论】:

  • 你是使用默认列表方法还是覆盖它?
  • 它被覆盖了。我已经添加了代码。
  • 我认为如果您覆盖列表方法,那么您必须实现自己的分页?

标签: django rest pagination django-rest-framework


【解决方案1】:

超级列表中添加的分页,所以试试:

    def list(self, request):
        #get_queryset is also overridden to accept filters in query_params
        queryset = self.get_queryset()
        if not queryset.exists():
            return Response(status=status.HTTP_204_NO_CONTENT)

        return super(ProductViewSet, self).list(request)

【讨论】:

    猜你喜欢
    • 2016-08-06
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多