Python 如何将查询中设置的页面大小放入分页元数据django rest框架

Python 如何将查询中设置的页面大小放入分页元数据django rest框架,python,django,django-rest-framework,Python,Django,Django Rest Framework,我已经为我的一个应用程序设置了自定义分页,我面临的问题是页面大小仅显示应用程序中设置的默认值,但不会根据查询参数中发送的值进行更改。我哪里做错了 class CustomPagination(PageNumberPagination): page_size = 10 page_size_query_param = 'page_size' def get_paginated_response(self, data): return Response({"s

我已经为我的一个应用程序设置了自定义分页,我面临的问题是页面大小仅显示应用程序中设置的默认值,但不会根据查询参数中发送的值进行更改。我哪里做错了

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)
页面大小的输出总是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)
paginate_queryset()
请求作为其第二个位置参数。需要
请求
,以便从中获取
页面大小

您没有传递
请求
,因此我很想理解为什么视图能够工作——因为Python应该由于参数数量不正确而引发
类型错误

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

page = self.paginate_queryset(pc, request)

有一种方法可以帮助您实现这一点<代码>获取页面大小(请求)
是,您需要传入原始请求。幸运的是,您可以通过
self.request

def get_paginated_response(self, data):
    print(self.get_page_size(self.request))
    ....
此外,要获得所需的总页数,请按当前页面大小和记录计数 可以做到以下几点

import math
math.ceil(self.page.paginator.count / self.get_page_size(self.request))

希望这有帮助

您是否在
settings.py
中设置了
DEFAULT_PAGINATION_CLASS
以指向您的
CustomPagination
类?或者您是直接从视图调用
CustomPagination
API?如何在API视图子类中使用CustomPagination类?你能添加代码吗?@WillKeeling我在settings.py.中设置了默认的分页类,@Rudolf Olah我在编辑中添加了代码。谢谢你的解决方案,我按照你的建议添加了请求参数,这为我触发了类型错误,
TypeError:paginate_queryset()接受2个位置参数,但给出了3个
?您是否在任何地方重写了
paginate_queryset()
?啊,我的错误,您确实用一个参数正确调用了该方法。
GenericAPIView
(超类)为您添加了第二个参数!但是如何在自定义分页类中访问它?正如我的显示名所说,m仍然是一个noob XD,分页类将根据您在
settings.py
中设置的内容自动应用。您是否能够使用
设置.py更新您的问题?特别是
REST\u框架
部分,其中包含
默认分页类