我有两个Django模型。一对多关系的Client
和Group
(客户可以分配多个组)。模型Group
包含三个整数字段sc_done
,sc_analyze
和sc_error
。我想做的是创建Django查询,该查询返回所有组中总和Clients
,sc_done
和sc_analyze
最高的前10个sc_error
。这些模型如下:
class Client(models.Model):
name = models.CharField(_("name"), max_length=255, blank=False, null=True)
...
class Group(models.Model):
client = models.ForeignKey(Client, on_delete=models.SET_NULL, null=True, blank=True)
sc_done = models.PositiveIntegerField(blank=True, null=True)
sc_analyze = models.PositiveIntegerField(blank=True, null=True)
sc_error = models.PositiveIntegerField(blank=True, null=True)
...
例如,如果client-1
是两个组的一部分:group-1
,group-2
,则查询将返回类似:{'client': 'client-1', 'sc_count': X}
,其中X是{{1 }},sc_done
和sc_analyze
中的sc_error
和group-1
。
不确定此问题是否可以理解,请询问是否需要澄清。
答案 0 :(得分:1)
from django.db.models import F, Sum
Client.objects.values(
'name'
).annotate(
sc_done_sum=Sum('group__sc_done'),
sc_analyze_sum=Sum('group__sc_analyze'),
sc_error_sum=Sum('group__sc_error'),
sc_count=F('sc_done_sum')+F('sc_analyze_sum')+F('sc_error_sum'),
client=F('name'),
).values(
'client',
'sc_count',
).order_by('-sc_count')[:10]
预期结果:
[{'client': 'client-1', 'sc_count': 100},
...
{'client': 'client-2', 'sc_count': 90}]