概要
详细解答filtered、lambda 、mapped、sorted在odoo中的作用,使用场景以及使用方法。
内容
filtered
定义
filtered
方法用于从记录集中筛选出满足特定条件的记录。
使用场景
当你有一个记录集,但只需要其中一部分记录时,可以使用 filtered
方法。例如,筛选出所有状态为 "done" 的订单。
使用方式
# 筛选出状态为 'done' 的订单
orders = self.env['sale.order'].search([])
done_orders = orders.filtered(lambda o: o.state == 'done')
lambda
定义
lambda
表达式是一种创建匿名函数的方法,常用于简单的计算或条件表达式。
使用场景
在 Odoo 中,lambda
表达式常用于 filtered
、sorted
和其他需要函数作为参数的方法。例如,筛选出满足特定条件的记录或对记录集进行排序。
使用方式
# 使用 lambda 表达式筛选和排序
orders = self.env['sale.order'].search([])
# 筛选出总金额大于 1000 的订单
large_orders = orders.filtered(lambda o: o.amount_total > 1000)
# 按客户名排序订单
sorted_orders = orders.sorted(key=lambda o: o.partner_id.name)
mapped
定义
mapped
方法用于从记录集中提取特定字段的值,并返回一个列表。它也可以用来调用记录集的方法并收集其返回值。
使用场景
当你需要一个记录集的某个字段的所有值,或者需要调用记录集的某个方法并收集返回值时,可以使用 mapped
方法。例如,获取所有订单的总金额。
使用方式
# 获取所有订单的总金额
orders = self.env['sale.order'].search([])
order_amounts = orders.mapped('amount_total')# 调用记录集的方法并收集返回值
partner_names = self.env['res.partner'].search([]).mapped('name_get')
sorted
定义
sorted
方法用于对记录集进行排序。
使用场景
当你需要按特定字段对记录集进行排序时,可以使用 sorted
方法。例如,按订单日期排序订单。
使用方式
# 按订单日期排序订单
orders = self.env['sale.order'].search([])
sorted_orders = orders.sorted(key=lambda o: o.date_order)
小结
多写多敲多思考,毕竟,知己知彼才能看懂源码。
Tip:本人才学尚浅,如有纰漏,还请不吝赐教!