【问题标题】:struggling with django regroup与 django 重组斗争
【发布时间】:2011-02-11 13:59:29
【问题描述】:

我有两个模型。

一个项目和一个支持者模型。

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

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

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 %}

虽然这会返回超出预期的结果。

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

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    我不确定你在做什么重组,但拥有最多支持者的项目是:

    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]
    

    【讨论】:

      猜你喜欢
      • 2021-04-30
      • 1970-01-01
      • 2021-03-22
      • 1970-01-01
      • 2020-09-18
      • 2018-05-23
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多