在odoo 10中使用mapped()

Kar*_*med 2 python openerp python-2.7 odoo-10

是什么映射以及如何在odoo 10中使用它?以及如何在odoo 10中使用映射和过滤器?为例

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

并且将field1的每个值与同一表中的其他field2一起返回全部和.

dcc*_*any 6

过滤后将返回符合条件的记录集(在您的情况下,状态不是"状态"的订单行).

当您使用映射到记录集时,我将为每个记录集返回一个带有field_name的列表,如果该字段是many2one,我将删除重复项.

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

record 1: quantity = 5
record 2: quantity = 6
record 3: quantity = 10
Run Code Online (Sandbox Code Playgroud)

过滤后你可能有:

res = sale.order.line(1,2,3,)
Run Code Online (Sandbox Code Playgroud)

在应用映射时:

quantities_list = res.mapped('quantity') #[5, 6, 10]
Run Code Online (Sandbox Code Playgroud)

所以如果它们是float/int,则总和将返回21.

希望能帮助到你!


dan*_*era 5

Odoo docs上有完整记录:

mapping():将提供的函数应用于记录集中的每个记录,如果结果是记录集,则返回一个记录集。提供的函数可以是用于获取字段值的字符串。

# returns a list of names
records.mapped('name')
Run Code Online (Sandbox Code Playgroud)

在您的代码中,表达式order.order_line.filtered( lambda r: r.state != "state" ).mapped( "field_name" )返回field_namefrom 的列表order。然后sumpython函数求和。

  • 谢谢,对于我使用的 odoo 文档,records.mapped(lambda r: r.field1 + r.field2) 正在为我工​​作。 (2认同)