How to merge multiple query sets in DJANGO
本问题已经有最佳答案,请猛点这里访问。
我必须将下面的查询集合并到一个列表中:
1 2 3 4 5 | result_list_1 = Col.objects.defer("tags").filter(producer__username__icontains=crit) result_list_2 = Col.objects.defer("tags").filter(name__icontains=crit) result_list_3 = Col.objects.defer("tags").filter(description__icontains=crit) result_list_4 = Col.objects.filter(tags__name__icontains=crit) ... |
每个结果_列表都包含项目,它们具有唯一的数字ID,我可以使用它来确保没有重复。
查询db或q对象时不能使用。
如何将结果合并到一个列表中?
稍微修改一下
1 2 3 4 5 6 7 | def unique_chain(*iterables): known_ids = set() for it in iterables: for element in it: if element.id not in known_ids: known_ids.add(element.id) yield element |
号
通过它,您可以创建组合列表:
1 | combined_list = list(unique_chain(result_list_1, result_list_2, ... )) |
那么你不能有一个
1 2 3 4 5 6 | import itertools merged = itertools.chain(qs1, qs2, qs3, qs4) for element in merged: print(element) |