例如,我有2个查询集:
q1=MyModel.objects.filter(visible=True)
q2=MyModel.objects.filter(published=True)
我需要创建单个查询集或列表,其中包含q1和q2中的所有对象。
我曾经这样做过:
q=list(chain(q1,q2))
#q= q1 | q2 #this gives me not all objects from q2 or q1,so i don't use bitwise or
但有人说,list()
会对数据库产生额外的查询。这是真的吗?如果是,有人可以指定最优化的合并方式吗?
答案 0 :(得分:1)
q1=MyModel.objects.filter(visible=True)
q2=MyModel.objects.filter(published=True)
qs12 = QuerySetSequence(qs1, qs2)
将上述代码与此代码段结合使用:http://djangosnippets.org/snippets/1933/
答案 1 :(得分:1)
您可以尝试这样做:
q1_pks = MyModel.objects.filter(visible=True).values_list('pk', flat=True)
q2_pks = MyModel.objects.filter(published=True).values_list('pk', flat=True)
final_query = MyModel.objects.filter(pk__in=list(q1_pks).extend(list(q2_pks)))
这应该可以解决问题,虽然我不确定那些list(qX_pks)
是否会产生性能问题。