【问题标题】:How to generate a total sum with a Django QuerySet and display in a template?如何使用 Django QuerySet 生成总和并在模板中显示?
【发布时间】: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。

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

【问题讨论】:

    标签: django django-views django-templates django-queryset


    【解决方案1】:

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

    {{ numcontestants.0.num_contestants }}
    

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

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

    【讨论】:

    • 啊,这么简单,谢谢。我读到的关于如何计算记录的所有内容似乎都表明 count 必须与 annotate 一起使用,我没有意识到我可以直接在查询集上使用 count。现在因为错过了如此明显的事情而感到愚蠢。
    猜你喜欢
    • 2021-08-13
    • 2012-03-01
    • 2015-04-18
    • 2021-01-30
    • 2017-11-13
    • 2021-02-15
    • 2016-03-16
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多