外键值的Django Sum
Django Sum of foreing key values
我有两个 Django 模型。 Client
和 Group
具有一对多关系(客户端可以分配多个组)。模型 Group
包含三个整数字段 sc_done
、sc_analyze
和 sc_error
。我想要做的是创建 Django 查询,其中 return 排名前 10 Clients
的总和数最多 sc_done
、sc_analyze
和 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
,查询将 return 类似于:{'client': 'client-1', 'sc_count': X}
其中 X是 group-1
和 group-2
的 sc_done
、sc_analyze
和 sc_error
的总和。
不确定这个问题是否可以理解,请询问是否需要任何说明。
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}]
我有两个 Django 模型。 Client
和 Group
具有一对多关系(客户端可以分配多个组)。模型 Group
包含三个整数字段 sc_done
、sc_analyze
和 sc_error
。我想要做的是创建 Django 查询,其中 return 排名前 10 Clients
的总和数最多 sc_done
、sc_analyze
和 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
,查询将 return 类似于:{'client': 'client-1', 'sc_count': X}
其中 X是 group-1
和 group-2
的 sc_done
、sc_analyze
和 sc_error
的总和。
不确定这个问题是否可以理解,请询问是否需要任何说明。
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}]