Django模型:聚合多个外键字段值的总和

时间:2016-03-05 19:15:07

标签: django database sum aggregate annotate

我有以下Django数据库模型:

class Entry(models.Model):
     author = models.ForeignKey(User);
     target = models.ForeignKey(User);
     points = models.IntegerField(default=0);

用户可以给另一个用户点。目标是计算 每个元组用户的积分总和。显而易见的方法是使用迭代,但这会导致许多不必要的查询。虽然这是一个相当简单的SQL查询,但我无法使用djangos API。我玩过annonate,aggregate和Q过滤器但是无法达到预期的效果。

最好结果如下:

[{'user_one_pk': 1, 'user_two_pk': 2, 'sum__points': 6},
 {'user_one_pk': 1, 'user_two_pk': 3, 'sum__points': -3},
 {'user_one_pk': 2, 'user_two_pk': 3, 'sum__points': 9}]

编辑:编辑结果以澄清唯一元组。

1 个答案:

答案 0 :(得分:2)

在django,您可以尝试:

from django.db.models import Sum
Entry.objects.all().values('author','target').annotate('sum__points'=Sum('points'))