Use mapped() in odoo 10
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!
![Karara Mohamed](https://i.stack.imgur.com/5iCgS.png?s=256&g=1)
Karara Mohamed
I enjoy coding, I spend the best time while coding. solving problems comes naturally for me.
Updated on June 14, 2022Comments
-
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.