Use mapped() in odoo 10

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.

2 Answers

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.

1

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!

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like