Django削减查询只获得“第n到第n”结果

时间:2016-12-12 18:23:38

标签: python sql django django-models

我正在使用Javascript using AJAX/Jquery编码多页表视图,数据库有很多记录,因此每次用户更改页面时,都会从服务器中询问新查询,只会显示那些显示的< / p>

因此,假设用户点击第5页并选择每页显示15个结果,视图应查询结果,但仅从(5 * 15)nth发送到(6 * 15)第n个对象。

1)如何如上所述切割QuerySet

2)有没有办法将其包含在Query本身以获得更好的性能?或者我是否需要先拨打MyModel.objects.all()然后剪切结果?

2 个答案:

答案 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