django中有一个Paginator
。 from 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似乎不支持存储过程...
答案 0 :(得分:1)
你的分析是错误的。您没有将完整的消息传递给分页器。
查询集是惰性的,并且不会被计算到它们被迭代:在paginator的情况下,它将对对象进行切片 - 这导致LIMIT / OFFSET在被发送到db之前被添加到SQL查询中。不会提取超过一页的结果。