如何将查询中设置的page_size设置到分页元数据中Django Rest Framework

时间:2019-01-02 12:57:52

标签: python django django-rest-framework

我为其中一个应用程序设置了自定义分页,我面临的问题是page_size仅显示应用程序中设置的默认值,但不会根据查询参数中发送的值而更改。我要去哪里错了?

class CustomPagination(PageNumberPagination):
    page_size = 10
    page_size_query_param = 'page_size'

    def get_paginated_response(self, data):
        return Response({"status": True,
                         "data": {
                             'results': data,
                             "meta": {
                                 'page_count':self.page.paginator.num_pages,
                                 'total_results': self.page.paginator.count,
                                 'current_page_no': self.page.number,
                                 'limit': self.page_size,
                                 'last_page': self.page.has_next()
                             }}}, 
                         status=status.HTTP_200_OK)

即使我将查询参数设置为其他值,page_size的输出也始终为10。例如:如果用户在查询参数中设置page_size = 2,则应更改为2。

编辑:

视图代码

class ListPCAPIView(ListAPIView):
serializer_class = ListPCSerializer

def get(self, request):
    user = self.request.user
    pc = Pc.objects.filter(
        user_id=user).order_by('pc_name')
    if pc:
        page = self.paginate_queryset(pc)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
    else:
        raise CustomException(
            detail="pc list is empty.",
            status_code=status.HTTP_400_BAD_REQUEST)

2 个答案:

答案 0 :(得分:2)

有一种方法可以帮助您实现这一目标。 select是的,您需要传递原始请求。幸运的是,您可以通过get_page_size(request)

获得它
self.request

此外,要获得所需的总页数,当前页面大小和记录数 可以完成以下操作。

def get_paginated_response(self, data):
    print(self.get_page_size(self.request))
    ....

希望这会有所帮助

答案 1 :(得分:0)

paginate_queryset()request作为其第二个位置参数。需要request,以便可以从中获取page_size

您没有传递request,所以我很好奇理解视图为什么起作用的原因-由于参数数量错误,Python应该引发TypeError

无论如何,请尝试更新代码以将request作为第二个参数传递:

page = self.paginate_queryset(pc, request)