如何通过共同的键组合多个查询集?

2024-04-19 14:17:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有几个查询集必须有效地组合。所有查询集都有公共字段key,我想用它的值连接查询结果。E、 克:

some_query = SomeObject.objects.values('key').annotate(sum_0=Sum('some_value_field'))
other_query = OtherObject.objects.values('key', 'other_field').annotate(sum_1=Sum('some_other_value_field'))

我所拥有的:

[{'key': 1, 'sum_0': 10}, {'key': 2, 'sum_0': 20}, ...]
[{'key': 1, 'sum_1': 1000}, {'key': 2, 'sum_1': 200}, ...]

我想要的是:

[{'key': 1, 'sum_0': 10, 'sum_1': 100}, {'key': 2, 'sum_0': 20, 'sum_1': 200}, ...]

我使用这种方法来组合dicts:

d = defaultdict(dict)
for item in [some_query, other_query]:
    for elem in item:
        d[elem['key']].update(elem)
combined = d.values()

除了通过遍历每个查询集来实现字典合并之外,还有没有更有效的方法来实现这一点?或者有没有一种方法可以通过key将这些查询集组合成查询本身的一个结果?你知道吗


Tags: 方法keyfieldforobjectsvaluesomeitem
2条回答

可以组合注释以仅执行一个db操作:

SomeObject.objects.values('key', 'other_field').annotate(sum_0=Sum('some_value_field'), sum_1=Sum('some_other_field'))

你知道吗itertools.chain公司是我比较喜欢的方式,但是注解可以工作。你知道吗

相关问题 更多 >