如何在DRF PageNumberPagination中设置动态page_size

时间:2018-12-13 23:50:05

标签: python django django-rest-framework

在类PostByFilters中,我将limit作为url参数,并将值分配到类page_size中的BasicSizePagination中。我试图在这两个类之外使用全局变量,但是没有用。无论如何,是否需要重新初始化BasicSizePagination中的PostByFilters,以便我可以直接为PostByFilters中的值赋值?

class BasicSizePagination(pagination.PageNumberPagination):
    page_size = 10

class PostByFilters(ListAPIView):
    serializer_class = serializers.PostSerializer
    pagination_class = BasicSizePagination

    def get_queryset(self):

        limit = self.request.query_params.get('limit', None)
        ...

        return queryset

1 个答案:

答案 0 :(得分:2)

PageNumberPagination 创建一个新的分页类,并按如下所示覆盖 page_size_query_param 属性

from rest_framework.pagination import PageNumberPagination


class CustomPageNumberPagination(PageNumberPagination):
    page_size_query_param = 'size'  # items per page

因此,您的网址将为 /api/foo/?size=10 ,每页将返回10个项目。如果您未在URL中提供 size 参数,则DRF将使用 settings.PAGE_SIZE