我有两个模特。
项目和支持者模型。
我想基本上运行一个返回支持最多的项目的查询。
重新组合是实现这一目标的唯一方法吗?
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 %}
虽然这会带来超过预期的结果。
所以我基本上想要获得支持项目的支持者总数。
答案 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]