在 odoo 10 中使用 mapped()

Use mapped() in odoo 10

映射了什么以及如何在 odoo 10 中使用它? 以及如何在 Odoo 10 中使用映射和过滤? 例子

result = sum( order.order_line.filtered(
                lambda r: r.state != "state" ).mapped( "field_name" ) 
)

并将 field1 的每个值乘以其他 field2 在相同的 table 和 return 所有总和。

过滤将 return 符合条件的记录集(在您的情况下,状态不是 "state" 的订单行)。

当您使用映射到记录集时,我将为每个记录集 return 一个包含 field_name 的列表,如果该字段是 many2one,它将删除重复项。

例如,您有一个记录集,其中包含一个名为 "quantity" 的字段。

record 1: quantity = 5
record 2: quantity = 6
record 3: quantity = 10

过滤后你可能有:

res = sale.order.line(1,2,3,)

应用映射时:

quantities_list = res.mapped('quantity') #[5, 6, 10]

所以总和将为 return 21 如果它们是 float/int。

希望对您有所帮助!

Odoo docs:

上有完整记录

mapped(): applies the provided function to each record in the recordset, returns a recordset if the results are recordsets. The provided function can be a string to get field values.

# returns a list of names
records.mapped('name')

在您的代码中,表达式 order.order_line.filtered( lambda r: r.state != "state" ).mapped( "field_name" ) returns 来自 orderfield_name 的列表。然后 sum python 函数进行求和。