我有一个带有两个自定义管理器方法的Django模型。每个对象都基于对象的不同属性返回模型对象的不同子集。
有没有什么方法可以获取一个查询集,或者仅仅是一个对象列表,那就是每个管理器方法返回的查询集的并集?
我有一个带有两个自定义管理器方法的Django模型。每个对象都基于对象的不同属性返回模型对象的不同子集。
有没有什么方法可以获取一个查询集,或者仅仅是一个对象列表,那就是每个管理器方法返回的查询集的并集?
Answers:
这可以工作,看起来更干净:
records = query1 | query2
如果您不希望重复,则需要添加.distinct():
records = (query1 | query2).distinct()
ManyToManyFields时可能返回错误的结果。例如,您有时会看到该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