首页 > 解决方案 > 如何获取 Django 模板中字段中具有特定值的所有对象的计数?

问题描述

我想获得False对象字段的所有对象集的计数adult

我在模板中循环遍历“家庭”模型:

class Family(models.Model):
    name = models.CharField(max_length=255)

class Person(models.Model):
    family = models.ForeignKey(Family, on_delete=models.CASCADE, related_name='person', related_query_name='person')
    adult = models.BooleanField()

这是我想在模板中实现的目标:

# views.py
families = Family.objects.all()
# index.html

{% for family in families %}
    {{ family.name }} has {{ family.person(adult=False).count() }} non-adults!
{% endfor %}

标签: djangodjango-templates

解决方案


如果我对您的理解正确,我认为您的问题最好通过使用 django 注释来解决(有关详细信息,请参阅文档)。

在您看来,用成年人的数量来注释每个 Family 对象:

families = Family.objects.annotate(non_adults=Count('person', filter=Q(person__adult=False)))

然后你可以简单地在你的模板中使用这个注解

{% for family in families %}
    {{ family.name }} has {{ family.non_adults }} non-adults!
{% endfor %}

使用注释,您可以利用数据库的功能,这通常比在 python 中查询和执行其他操作更有效。


推荐阅读