gpt4 book ai didi

django - 如何实现不调用count(*)的分页器

转载 作者:行者123 更新时间:2023-12-04 02:13:29 27 4
gpt4 key购买 nike

我正在开发一个具有 MySQL innodb 后端的 django 网站。我们的几个表中有数十万条记录,这导致管理中出现一些站点稳定性/性能问题。具体来说,django 在创建分页器时喜欢进行 count(*) 查询,这会导致很多问题。

在 Django 1.3.x 中,他们开始允许提供自定义分页类。所以,我有兴趣找到一种适当加速或消除这些查询的方法。到目前为止,我一直在看这两页:http://code.google.com/p/django-pagination/source/browse/trunk/pagination/paginator.py
https://gist.github.com/1094682
并没有真正发现它们是我正在寻找的东西。任何建议,帮助等。将不胜感激。

最佳答案

您可以在分页器中定义 _count 变量

  paginator = Paginator(QuerySet, 300)
paginator._count = 9000 # or use some query here

这是 django 分页器代码的一部分,可帮助您了解此变量的作用以及页数的工作原理
def _get_count(self):
"Returns the total number of objects, across all pages."
if self._count is None:
try:
self._count = self.object_list.count()
except (AttributeError, TypeError):
# AttributeError if object_list has no count() method.
# TypeError if object_list.count() requires arguments
# (i.e. is of type list).
self._count = len(self.object_list)
return self._count
count = property(_get_count)

关于django - 如何实现不调用count(*)的分页器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7707035/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com