2016-09-20 77 views
3

我在这里和django documentation中发现了一些解决方案,但我无法设法使一个查询以我想要的方式工作。Django在'group by'之后的列的另一列的总和值

我有以下型号:

class Inventory(models.Model): 
    blindid = models.CharField(max_length=20) 
    massug = models.IntegerField() 

我想算Blind_ID的号码,然后求和massug他们进行分组后。

我目前Django的ORM

samples = Inventory.objects.values('blindid', 'massug').annotate(aliquots=Count('blindid'), total=Sum('massug')) 

它不能正确计算(它显示只有一个),因此这不是正确的总结。它似乎只是得到第一个结果......我也尝试使用Count('blindid', distinct=True)Count('blindid', distinct=False)以及。

这是使用samples.query的查询结果。 Django是由两列编组......

SELECT "inventory"."blindid", "inventory"."massug", COUNT("inventory"."blindid") AS "aliquots", SUM("inventory"."massug") AS "total" FROM "inventory" GROUP BY "inventory"."blindid", "inventory"."massug" 

这应该是原始的SQL

SELECT blindid, 
     Count(blindid) AS aliquots, 
     Sum(massug) AS total 
     FROM inventory 
     GROUP BY blindid 

回答

3

试试这个:

samples = Inventory.objects.values('blindid').annotate(aliquots=Count('blindid'), total=Sum('massug')) 
+0

它的工作。我不知道我可以选择注释字段中以前不在查询中的列。太好了,谢谢! – mk2

+0

这很好,但如果我想要取代库存对象实例而不是字典呢? –