【发布时间】:2013-02-22 17:48:10
【问题描述】:
例如,我有 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() 将对数据库产生额外的查询。这是真的吗?如果是,有人可以指定最优化的合并方式吗?
【问题讨论】:
-
在发布 cmets 之前,请仔细阅读我的要求。
-
好吧,然后
q = MyModel.objects.filter(Q(visible=True) | Q(published=True))。这将是两个查询集的联合。list()不会产生额外的查询,但会强制直接评估查询集,这将导致额外的内存开销。 -
感谢 list() 的解释,但您也可以阅读 p.s.我的问题的一部分。