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上进行分页,而不是加载所有对象,然后传给分页器。

DjangoPaginator(django.core.paginator.Paginator(类在queryset上使用一个切片,该切片在数据库上作为LIMIT查询运行,因此它不会获取所有实例然后获取子集,而是只使用LIMIT从数据库中检索子集。在偏移的情况下,它使用LIMIT <> OFFSET <>,所以这也是有效的。

Django查询集是惰性的,所以当你执行Contacts.objects.all()并将其传递给分页器时,它不会被求值——当分页器实际尝试对它进行切片以获得给定页面所需的元素数量时,它会被求值。

相关内容

  • 没有找到相关文章

最新更新