我有一个带有两个自定义管理器方法的Django模型。每个对象都基于对象的不同属性返回模型对象的不同子集。
有没有什么方法可以获取一个查询集,或者仅仅是一个对象列表,那就是每个管理器方法返回的查询集的并集?
我有一个带有两个自定义管理器方法的Django模型。每个对象都基于对象的不同属性返回模型对象的不同子集。
有没有什么方法可以获取一个查询集,或者仅仅是一个对象列表,那就是每个管理器方法返回的查询集的并集?
Answers:
这可以工作,看起来更干净:
records = query1 | query2
如果您不希望重复,则需要添加.distinct()
:
records = (query1 | query2).distinct()
ManyToManyField
s时可能返回错误的结果。例如,您有时会看到该records.count()
值大于query1.count() + query2.count()
,这显然是不正确的。
QuerySet
类提供方法__and__
和__or__
被调用的时候,&
或者|
运营商两者之间的使用QuerySet
对象(也可用于Q
类以及)。
我建议使用'query1.union(query2)'代替'query1 | query2'; 我从以上两种方法中得到了不同的结果,而前一种是我所期望的。以下是我遇到的内容:
print "union result:"
for element in query_set1.union(query_set2):
print element
print "| result:"
for element in (query_set1 | query_set2):
print element
结果:
union result:
KafkaTopic object
KafkaTopic object
KafkaTopic object
KafkaTopic object
KafkaTopic object
| result:
KafkaTopic object
KafkaTopic object