如何通过按字段总和排序的外键分组进行查询
How to make query with grouping by foreign keys with ordering by sum of field
例如我有一个模型:
class Reward(models.Model):
user = models.ForeignKey(UserProfile)
amount = models.IntegerField()
我想得到这样的统计数据:
[{
"user": user1,
"total_amount": 100500, // Sum of amount field of all rewards for this user
"total_rewards": 13 // Count of rewards for this user
},
{
"user": user2,
...
}
]
此列表应按 total_amount
字段排序。我该如何查询?
你可以用 annotate
from django.db.models import Count, Sum
UserProfile.objects.annotate(
total_amount=Sum('reward__amount'),
total_rewards=Count('reward')
).values('id', 'total_amount', 'total_rewards').order_by('total_amount')
例如我有一个模型:
class Reward(models.Model):
user = models.ForeignKey(UserProfile)
amount = models.IntegerField()
我想得到这样的统计数据:
[{
"user": user1,
"total_amount": 100500, // Sum of amount field of all rewards for this user
"total_rewards": 13 // Count of rewards for this user
},
{
"user": user2,
...
}
]
此列表应按 total_amount
字段排序。我该如何查询?
你可以用 annotate
from django.db.models import Count, Sum
UserProfile.objects.annotate(
total_amount=Sum('reward__amount'),
total_rewards=Count('reward')
).values('id', 'total_amount', 'total_rewards').order_by('total_amount')