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

Django models: Aggregate Sum over multiple foreign key field values

我有以下 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}]

编辑:为澄清唯一元组而编辑的结果。

在django中,你可以试试:

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