diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py index 5ca7621ab22..4af5579266b 100644 --- a/openerp/osv/orm.py +++ b/openerp/osv/orm.py @@ -4533,9 +4533,13 @@ class BaseModel(object): if ((not f[trigger_fields_]) or set(fields).intersection(f[trigger_fields_]))] mapping = {} + fresults = {} for function in to_compute: - # use admin user for accessing objects having rules defined on store fields - target_ids = [id for id in function[id_mapping_fnct_](self, cr, SUPERUSER_ID, ids, context) if id] + fid = id(function[id_mapping_fnct_]) + if not fid in fresults: + # use admin user for accessing objects having rules defined on store fields + fresults[fid] = [id2 for id2 in function[id_mapping_fnct_](self, cr, SUPERUSER_ID, ids, context) if id2] + target_ids = fresults[fid] # the compound key must consider the priority and model name key = (function[priority_], function[model_name_]) @@ -4556,8 +4560,8 @@ class BaseModel(object): functions_ids_maps = {} # function_ids_maps = # { (function_1_tuple, function_2_tuple) : [target_id1, target_id2, ..] } - for id, functions in id_map.iteritems(): - functions_ids_maps.setdefault(tuple(functions), []).append(id) + for fid, functions in id_map.iteritems(): + functions_ids_maps.setdefault(tuple(functions), []).append(fid) for functions, ids in functions_ids_maps.iteritems(): call_map.setdefault((priority,model),[]).append((priority, model, ids, [f[func_field_to_compute_] for f in functions]))