参见英文答案 >
How to combine 2 or more querysets in a Django view? 10个
我必须在下面的单个列表中合并查询集:
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)
...
每个result_list都包含项目,这些项目具有唯一的数字ID,可用于确保没有重复项.
我不能用|同时查询DB或Q对象.
如何将结果集合并到一个列表中?
最佳答案 如何对itertools.chain稍作修改,以确保您不会遭遇欺骗:
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
有了它,您可以创建组合列表:
combined_list = list(unique_chain(result_list_1, result_list_2, ... ))