Django中的分页概念和实现大型对象的有效方法

在学习Django概念时,我遇到了分页概念,网址为:https://docs.djangoproject.com/en/2.2/topics/pagination/

我知道分页用于将模型的对象字段呈现为离散页面。

在文档中,作者提供了以下代码段:

contact_list = Contacts.objects.all() paginator = Paginator(contact_list,25)

基本上,这将加载模型Contacts的所有对象,并将它们置于分页中,以将每页大小限制为25。

我的问题是:假设我们在Contacts模型下有成千上万个具有大型TextField的对象,执行Contacts.objects.all()将需要一些时间,在这种情况下,实现分页的最佳方法是分页发生在Contacts.objects上,而不是全部加载然后传递给Paginator。

chengnuo2020 回答:Django中的分页概念和实现大型对象的有效方法

Django Paginatordjango.core.paginator.Paginator)类在queryset上使用切片,该切片在数据库上作为LIMIT查询运行,因此它不会获取所有实例,然后获取子集,而只能使用LIMIT从数据库检索子集。如果发生偏移,它会使用LIMIT <> OFFSET <>,因此效率也很高。

Django查询集是惰性的,因此当您执行Contacts.objects.all()并将其传递给分页器时,将不对其进行评估-稍后将在分页器实际尝试对其进行切片以获得所需数量的分页时对其进行评估。给定页面的元素。

本文链接:https://www.f2er.com/3071379.html

大家都在问