odoo记录集操作

合并记录集

实现
1 将两个记录集合并为一个并保留排序,使用如下操作:

result = recordset1 + recordset2

2 使用如下操作合并两个记录集并确保结果中没有重复内容:

result = recordset1 | recordset2

3 使用如下操作来查找两个记录集中共同的记录:

result = recordset1 & recordset2

运行原理
针对记录集的类实现了不同的Python运算符的重定义,在此处进行了使用。以下为可用于记录集的最有用的Python运算符的总结表:
运算符 执行操作

R1 + R2它返回一个包含 R1中记录的新记录集,后面跟 R2中的记录。这可能会产生记录集中的重复记录
R1 - R2它返回一个包含 R1中记录但不包含 R2中记录的新记录集。保留原有排序。
R1 & R2它返回一个既属于 R1又属于 R2的记录的新记录集(记录集的交集)。不保留原有排序。
R1 I R2它返回一个或属于 R1或属于 R2的记录的新记录集(记录集的并集)。不保留原有排序,且没有重复值。
R1 == R2如果两个记录集中包含相同的记录则返回 True。
R1 <= R2 R1 in R2如果 R1的记录也存在于 R2中返回 True。两种语法异曲同工。
R1 >= R2 R2 in R1如果 R2的记录也存在于 R1中返回 True。两种语法异曲同工。
R1 != R2如果R1和 R2不包含相同记录返回 True。

还有些赋值运算符+=, -=, &=和
|=,它们会修改左侧的运算项而不会新建记录集。在更新记录的One2many或Many2many字段时这些会非常的有用。

过滤记录集

filter()

记住filter()是在内存中进行运算。如果你尝试对关键路径上的方法进行性能优化,可能会要使用搜索域或者甚至是转向SQL,代价是损失代码易读性。

遍历记录集

mapped()

在使用mapped()时,要记住它在Odoo服务的内存中进行操作,该服务返利地遍历关联并因此产生很多SQL查询,这可能会影响效率。但是这种代码很直白且具备表达性。如果你在尝试优化实例关键路径上的方法提高性能的话,可能会要重写调用为mapped()并以相应的域来以search()进行表达,甚至是转向SQL(代价是损失代码易读性)。

mapped()方法也可以通过函数作为参数来进行调用。这种情况下,它返回包含应用于self每条记录的函数的结果列表,或者返回在函数返回的是记录集的情况下由该函数返回的记录集的并集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值