【发布时间】:2011-08-12 11:27:36
【问题描述】:
我需要在 django 查询集上对数据集进行聚合。
我有一个看起来像这样的模型:
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=...)
它们工作正常,以防我在该演示代码中遗漏了一个错字。我现在想显示模型 1 以及按类别分组的相关模型 2。我正在使用重组模板标记来执行此操作(请注意,我有一个名为 model2s 的类方法,它返回的结果与 model2_set.filter(active=True) 相同):
{% regroup m1.model2s by category as m2_list %}
然后我将它们正常显示并重新组合。这东西也很好用。现在我需要在每个类别组的顶部添加一个总摘要,其中包含该组的数字总和。因此,如果我有 2 个相同类别的模型 2 引用 1 个模型 1,其中一个的编号 = 1,另一个的编号 = 2,那么我需要显示 3。
实际上会有很多 Model2,所以这可能是一个昂贵的查询。
我查看了文档并查看了汇总和注释,但似乎都不允许我根据类别进行总和。我不想为每个类别都这样做:
m2sum = m1.model2s.filter(category='something').aggregate(Sum('number'))['number__sum']
有没有更简洁的方法来做到这一点,希望其中一种可以很好地重新组合?
【问题讨论】:
标签: python django django-queryset