7

What is mapped and how use this in odoo 10? And how to use mapped and filter in Odoo 10? example

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

and multiply each value of field1 by other field2 in same table an return all sum.

itssubas
  • 163
  • 2
  • 11
Karara Mohamed
  • 923
  • 1
  • 6
  • 19

2 Answers2

13

Is fully documented on 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')

In your code the expression order.order_line.filtered( lambda r: r.state != "state" ).mapped( "field_name" ) returns a list of field_name from order. Then sum python function do the sum.

dani herrera
  • 48,760
  • 8
  • 117
  • 177
9

The filtered will return the recordsets that match the criteria (in your case, the order lines that the state isnt "state").

When you use mapped to the recordset, i will return a list with the field_name for each of the recordset, if the field is a many2one, it will remove duplicates.

Example, you have a recordset with a field called "quantity".

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

after the filtered you may have:

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

when applying mapped:

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

so the sum will return 21 if they are float/int.

Hope it helps!

dccdany
  • 826
  • 7
  • 17