Django官方文档为我们提供了类似的内容:
from django.core.paginator import Paginator
my_list = MyModel.objects.all()
p = Paginator(my_list, 10)
但是。如果我必须对100万行进行分页怎么办?每次我想查看单个分页页面时,使用MyModel.objects.all()加载100万行效率不高。
有没有更有效的方法来执行此操作而无需调用objects.all()来进行简单的分页?
答案 0 :(得分:5)
MyModel.objects.all()
实际上并没有加载所有对象。它可能会加载所有这些,但在您实际执行需要对其进行评估的操作之前,它不会做任何事情。
Paginator几乎肯定会对该查询集添加一些限制。例如,使用数组切片表示法,它可以创建一个新对象,比如
my_list = MyModel.objects.all()
smaller_list = my_list[100:200]
这将创建一个不同的查询集,它只会从数据库中请求100个项目。或者在原始查询集上调用.count()
,这只会指示数据库返回表中的行数。
你必须做一些需要检索所有对象的事情,比如调用
list(my_list)
将1000000行从数据库传输到Python。