一、获取两个同一模型下查询集queryset的并集使用 | 和union方法
# 获取同一模型下两个查询集的并集
# 解决代码如下:
records = query1 | query2
# 如果不想拥有重复数据,这就需要增加一个方法:distinct()
records = (query1 | query2).distinct()
# django版本在1.11以后支持union方法
q = query1.union(query2) # q将包含query1 + query2的所有唯一记录
q = query1.union(query2, all=True) # q将包含query1 + query2的所有记录(包括重复数据)
q = query1.union(query2,query3) # 多个集合求并集
二、获取不同模型之间的合并
注意union只能对具有相同字段和数据类型的查询集执行联合操作。django为我们提供了一个values_list的方法用来限制所选字段,所以只要我们选出这两个模型的相同字段进行合并即可成功。
User.objects.all().values_list('username', 'email').union(UserProfile.objects.all().values_list('username', 'email'))# 查询集合并结果
三、获取两个queryset的交集用 &
query = Model.objects.filter(...) & Model.objects.filter(...)
或者:
query1 = Model.objects.filter(...)
query2 = Model.objects.filter(...)
query = query1 & query2