如何在模型级别中分页数据(django)

时间:2014-03-30 03:10:14

标签: python django orm pagination paging

django中有一个Paginatorfrom django.core.paginator import Paginator。 但是这个Paginator需要获取所有数据来提供它。 简单的例子:

def getMsgByPage():
    page =2

    messages = Message.objects.filter(participation__scene=scene, status='W')

    paginator = Paginator(messages , 50)

    page_obj = paginator.page(page)

    return page_obj 

每次用户查看页面时,我都会收到所有消息来生成该页面。您知道,messages table包含大量数据时非常糟糕。

那么,我如何在模型级别中分页消息数据?或者我应该创建一个分页存储过程来执行此操作?但是django似乎不支持存储过程...

1 个答案:

答案 0 :(得分:1)

你的分析是错误的。您没有将完整的消息传递给分页器。

查询集是惰性的,并且不会被计算到它们被迭代:在paginator的情况下,它将对对象进行切片 - 这导致LIMIT / OFFSET在被发送到db之前被添加到SQL查询中。不会提取超过一页的结果。