首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:对对象进行分组和计数的简单方法?

Django:对对象进行分组和计数的简单方法?
EN

Stack Overflow用户
提问于 2014-02-27 14:02:23
回答 2查看 75关注 0票数 0

我想做一些很简单的事情,但找不到方法去做。

models.py:

代码语言:javascript
复制
class Reward:
    name = models.CharField(max_length=50)
    # other stuff

class UseRewardEvent:
    reward = models.ForeignKey(Reward)
    # other stuff

最后,我想打印一个带有奖励名称的表和这个奖励名称的事件数量。

例如

如果UseRewardEvent.objets.all()包含3个对象,其链接的reward.name是:

  • “免费鸡”
  • “免费鸡”
  • “自由兔”

Reward.objects.all()包含3个对象,其名称为:

  • “免费鸡”
  • “自由兔”
  • “免费奶牛”

这应该会在我的模板中打印一个包含使用过的奖励的表格,如:

  • 免费鸡肉-> 2
  • 游离兔-> 1
  • -> 0(因为reward.name等于“空闲牛”没有reward.name)

非常感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-27 14:07:57

这就是聚合的目的。

代码语言:javascript
复制
from django.db.models import Count
Reward.objects.annotate(use_count=Count('userewardevent'))
票数 2
EN

Stack Overflow用户

发布于 2014-02-27 15:08:53

代码语言:javascript
复制
for reward in Reward.objects.all():
    print reward,'->',len(reward.userewardevent_set.all())

模板中使用

代码语言:javascript
复制
{% for reward in Reward.objects.all %}
<p>{{ reward }} --> {{ reward.userewardevent_set.all|length }}</p>
{% endfor %}

使用reward.userewardevent_set获取相关信息,它是一个RelatedManager,充当reward.objects

更有效率根据丹尼尔罗斯曼,thx!

代码语言:javascript
复制
for reward in Reward.objects.all():
    print reward,'->',reward.userewardevent_set.count()

模板中使用

代码语言:javascript
复制
{% for reward in Reward.objects.all %}
<p>{{ reward }} --> {{ reward.userewardevent_set.count }}</p>
{% endfor %}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22070832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档