django 两个查询集(querySet)的并集和交集

本文介绍了如何在Django中处理QuerySet,包括使用|(或)操作符和union方法获取查询集的并集,使用&(和)操作符获取交集,以及如何合并不同模型的查询集。对于并集,可以使用distinct()去除重复数据。同时,union方法支持在1.11及更高版本中合并多个查询集,可以指定是否包含重复数据。对于不同模型的合并,通过values_list限制相同字段进行合并。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、获取两个同一模型下查询集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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值