Django针对复杂运算查询分页数据缓慢重写分页方法

def paginate_queryset(self, queryset, request, view=None):
    """
    Paginate a queryset if required, either returning a
    page object, or `None` if pagination is not configured for this view.
    """
    page_size = self.get_page_size(request)
    if not page_size:
        return None
    paginator = self.django_paginator_class(queryset, page_size)
    page_number = self.get_page_number(request, paginator)
    print(page_number)
    try:
        #这里是重点因为每次查询结果是固定数量,因此这里做了优化,所以这里要传1
        self.page = paginator.page(1)
        #重新对页码赋值,要不页码永远默认为第一页,就不会实现跳转了
        self.page.number = int(page_number)
    except InvalidPage as exc:
        msg = self.invalid_page_message.format(
            page_number=page_number, message=str(exc)
        )
        raise NotFound(msg)
    if paginator.num_pages > 1 and self.template is not None:
        # The browsable API should display pagination controls.
        self.display_page_controls = True

    self.request = request
    return list(self.page)
def get_paginated_response(self, data, columns,count,limit):
    #重写分页返回,自己定义总页数,如果不重写返回数据错误
    self.page.paginator.num_pages = int(count/limit)
    print(self.page.paginator.num_pages)
    return Response(OrderedDict([
        ('count', count),
        ('next', self.get_next_link()),
        ('previous', self.get_previous_link()),
        ('results', data),
        ('columns', columns),
    ]))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值