我需要在django queryset上对数据集进行聚合。
我有一个这样的模型:
class Model1(models.Model):
... some fields here ...
class Model2(models.Model):
model1 = models.ForeignKey(Model1)
number = models.IntegerField()
active = models.BooleanField()
category = models.CharField(choices=...)
它们工作得很好,以防我在演示代码中漏掉了一个输入错误。我现在要显示model1,并按类别分组它们的相关model2。我使用regroup template标记(注意,我有一个名为model2s的类方法,它返回与model2 set.filter(active=True)相同的结果):
{% regroup m1.model2s by category as m2_list %}
然后我用重新组合的方式将它们显示为正常。这种东西也很好用。现在我需要在每个类别组的顶部添加一个总摘要,其中包含该组的数字和。因此,如果我有两个相同类别的model2引用了一个Model1,其中一个Model1的编号为1,另一个model2的编号为2,那么我需要显示3。
实际上会有很多model2,所以这可能是一个昂贵的查询。
我看过文档,看到了聚合和注释,但似乎都不允许我根据类别进行求和。我不想对每个类别都这样做:
m2sum = m1.model2s.filter(category='something').aggregate(Sum('number'))['number__sum']
有没有一个更干净的方法来做到这一点,希望其中一个工作与重组很好?
我非常确定您可以使用annotate QuerySet方法来完成这项工作。如果我能找到一个好的例子,我会发布一个更新。
更新:我想是这样的。。。。如果我正确理解你的问题。但你会用Count而不是Avg
相关问题 更多 >
编程相关推荐