如何使用 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 1.2 等价于 QuerySet.query.as_sql()
Django - 如何将 QuerySet 转换为 Q 对象?
在 Django 中,如何使用动态字段查找过滤 QuerySet?
如何在 Django 中覆盖“get_queryset()”
如何在 ModelAdmin.formfield_for_manytomany() 中使用 Django QuerySet.union()?