47

在我的 html 文件中,如何输出我正在使用的查询集的大小(出于调试目的)

我试过了

{{ len(some_queryset) }}

但这没有用。格式是什么?

4

5 回答 5

83

试一试{{ some_queryset.count }}

这比使用 len (可以用 调用{{ some_queryset.__len__ }})要好,因为它优化了后台生成的 SQL,只检索记录的数量而不是记录本身。

于 2012-05-22T03:25:35.010 回答
31

some_queryset.count(){{some_queryset.count}}在您的模板中。

不要使用len,效率要低得多。数据库应该做这项工作。请参阅有关count().

但是,考虑到缓冲区的建议,如果您打算无论如何都要遍历记录,您不妨使用len这将涉及解析查询集并使结果行驻留在主内存中 - 这不会浪费,因为您将访问这些反正行。它实际上可能更快,具体取决于数据库连接延迟,但您应该始终测量。

于 2012-05-22T03:26:40.827 回答
12

接受的答案并不完全正确。您是否应该使用 len() (或模板中的长度过滤器)与 count() 取决于您的用例。

如果QuerySet 仅用于计算行数,请使用 count()。

如果QuerySet 在别处使用,即在循环中,使用 len() 或 |length。在这里使用 count() 将发出另一个 SELECT 查询来计算行数,而 len() 只是计算 QuerySet 中缓存结果的数量。

文档

请注意,如果您想要 QuerySet 中的项目数并且还从中检索模型实例(例如,通过迭代它),使用 len(queryset) 可能更有效,它不会导致额外的数据库查询,例如count() 会。

尽管您似乎已经使用 prefetch_related() 预先加载了相关对象,但您可以安全地使用 count() 并且 Django 将足够聪明地使用缓存数据而不是执行另一个 SELECT 查询。

于 2018-11-17T11:11:49.680 回答
11

只是为了突出上面的@Yuji'Tomita'Tomita 评论作为单独的答案:

有一个过滤器length可以调用len()任何东西。

所以你可以使用:

{{ some_queryset|length }}
于 2016-06-08T18:30:14.737 回答
-2

虽然我试图用 Django(3.8.3)显示追随者的数量,但我解决了“计数”问题。

 <p>{{profile.following.count}}</p>
于 2021-07-19T17:39:22.330 回答