社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Django

如何将查询中设置的页面大小转换为分页元数据django rest框架

DjangoNoob • 5 年前 • 1242 次点击  

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

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)
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47673
 
1242 次点击  
文章 [ 1 ]  |  最新文章 5 年前
Will Keeling
Reply   •   1 楼
Will Keeling    6 年前

paginate_queryset() 接受 request 作为它的第二个位置参数。这个 请求 是为了 page_size 可以从中获得。

你不能通过 请求 所以我很好奇为什么这个视图能工作-因为python应该 TypeError 因为参数数目不正确。

无论如何,请尝试更新代码以通过 请求 作为第二个论点:

page = self.paginate_queryset(pc, request)