与django重组的斗争

时间:2011-02-11 13:59:30

标签: django django-templates django-views

我有两个模特。

项目和支持者模型。

我想基本上运行一个返回支持最多的项目的查询。

重新组合是实现这一目标的唯一方法吗?

class Project(models.Model):
    owner = models.ForeignKey(User)
    project_name = models.CharField(max_length=50, help_text='Lorem ipsum dolor sit amet.')

class Backer(models.Model):
    user = models.ForeignKey(User)
    project = models.ForeignKey(Project)
    amount = models.PositiveIntegerField()

我尝试了以下内容:

{% regroup backers by project as backers_list %}
{% for obj in backers_list %}
    <strong>{{ obj.grouper }}</strong><br />
{% endfor %}

虽然这会带来超过预期的结果。

所以我基本上想要获得支持项目的支持者总数。

1 个答案:

答案 0 :(得分:4)

我不确定您在重组方面做了什么,但支持数量最多的项目是:

Project.objects.annotate(Count('backer')).latest('backer__count')

使用注释 http://docs.djangoproject.com/en/dev/topics/db/aggregation/

如果你想要10个最受支持的项目,那就是

Project.objects.annotate(Count('backer')).order_by('-backer__count')[:10]

更新:我认为您可能在字段Backer.amount中表示“金额”,在这种情况下,您可以修改查询以使用django.db.models.Sum

Project.objects.annotate(amount = Sum('backer__amount')).order_by('-amount')[:10]