0

例如,我有 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()将对数据库产生额外的查询。这是真的吗?如果是,有人可以指定最优化的合并方式吗?

4

2 回答 2

1
q1=MyModel.objects.filter(visible=True)
q2=MyModel.objects.filter(published=True)
qs12 = QuerySetSequence(qs1, qs2)

将上面的代码与这个片段结合起来:http: //djangosnippets.org/snippets/1933/

于 2013-03-07T14:27:06.790 回答
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)会产生性能问题。

于 2013-03-10T02:10:16.943 回答