如何使用 Django QuerySet 生成总和并在模板中显示?

Posted

技术标签:

【中文标题】如何使用 Django QuerySet 生成总和并在模板中显示?【英文标题】:How to generate a total sum with a Django QuerySet and display in a template? 【发布时间】:2021-03-18 18:18:11 【问题描述】:

我正在使用annotate 和我的 Django 查询集来计算记录数。我将它与filter 一起使用,并且理解顺序会有所不同。

我的查询是:numcontestants = Contestant.objects.filter(assigned_team__id=urlid).annotate(num_contestants=Count('id'))

当我将 numcontestants 传递给我的模板并使用 numcontestants 显示它时,我看到一个包含我要查看的每条记录的查询集。当我尝试:

numcontestants.num_contestants 我什么也得不到。

我不想遍历 numcontestants 来获得计数,我的理解是 num_contestants 应该是一个整数。即便如此,迭代并没有给出我想要的结果,例如使用:

% for x in numcontestants % x.num_contestants % endfor %

当我尝试获取将输出 3 的东西时输出 1 1 1

生成和访问总和计数的正确方法是什么?

【问题讨论】:

【参考方案1】:

annotate为每条记录返回一个数字,可以得到第一条记录的num_contestants:

 numcontestants.0.num_contestants 

如果您想获得多个查询集结果,可以在您的查询集中使用.count()

numcontestants = Contestant.objects.filter(assigned_team__id=urlid).count()

【讨论】:

啊,这么简单,谢谢。我读到的关于如何计算记录的所有内容似乎都表明 count 必须与 annotate 一起使用,我没有意识到我可以直接在查询集上使用 count。现在因为错过了如此明显的事情而感到愚蠢。

以上是关于如何使用 Django QuerySet 生成总和并在模板中显示?的主要内容,如果未能解决你的问题,请参考以下文章

DJango filter_queryset

Django 1.2 等价于 QuerySet.query.as_sql()

Django - 如何将 QuerySet 转换为 Q 对象?

在 Django 中,如何使用动态字段查找过滤 QuerySet?

如何在 Django 中覆盖“get_queryset()”

如何在 ModelAdmin.formfield_for_manytomany() 中使用 Django QuerySet.union()?