我正在使用Javascript using AJAX/Jquery
编码多页表视图,数据库有很多记录,因此每次用户更改页面时,都会从服务器中询问新查询,只会显示那些显示的< / p>
因此,假设用户点击第5页并选择每页显示15个结果,视图应查询结果,但仅从(5 * 15)nth发送到(6 * 15)第n个对象。
1)如何如上所述切割QuerySet
?
2)有没有办法将其包含在Query
本身以获得更好的性能?或者我是否需要先拨打MyModel.objects.all()
然后剪切结果?
答案 0 :(得分:2)
您可以使用普通的Python切片对查询进行切片:
MyModel.objects.all()[10:20]
有关详细信息,请参阅:https://docs.djangoproject.com/en/1.10/topics/db/queries/#limiting-querysets
您还应该阅读文档的这一部分:https://docs.djangoproject.com/en/1.10/topics/pagination/
答案 1 :(得分:1)
当您使用时,Django ORM尊重常见的python列表操作模式
MyModel.objects.all()
,原始查询仅在消耗时才会被执行。请参阅
MyModel.objects.all()[10:20]
这里内部python slice
dunder方法的工作方式与LIMIT&amp; OFFSET查询而不是在内存中处理。
问题的推荐解决方案
为了您的目的使用django分页,您可以查看here以获取更多详细信息。
my_list = MyModel.objects.all()
paginator = Paginator(my_list, 15) # 15 objects per page