Use mapped() in odoo 10

11,604

Solution 1

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.

Solution 2

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!

Share:
11,604
Karara Mohamed
Author by

Karara Mohamed

I enjoy coding, I spend the best time while coding. solving problems comes naturally for me.

Updated on June 14, 2022

Comments

  • Karara Mohamed
    Karara Mohamed about 2 years

    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.