From 0e5401e7778a0f7acdf5a67cfac5ee1d039d55d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Fri, 7 Aug 2009 16:38:33 +0200 Subject: [PATCH] Store ids found in ir.property to prevent to search many times for the same --- trytond/ir/property.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/trytond/ir/property.py b/trytond/ir/property.py index c387ea6dcd..ee6ac6c005 100644 --- a/trytond/ir/property.py +++ b/trytond/ir/property.py @@ -71,14 +71,20 @@ class Property(ModelSQL, ModelView): raise Exception('Not implemented') default_vals[property.field.name] = val + id_found = {} + if not res_ids: for field in fields: if field.ttype == 'many2one': obj = self.pool.get(field.relation) - if not obj.search(cursor, user, [ - ('id', '=', default_vals[field.name]), - ], order=[], context=context): + id_found.setdefault(field.relation, set()) + if default_vals[field.name] not in id_found[field.relation]\ + and not obj.search(cursor, user, [ + ('id', '=', default_vals[field.name]), + ], order=[], context=context): default_vals[field.name] = False + if default_vals[field.name]: + id_found[field.relation].add(default_vals[field.name]) return default_vals for name in names: @@ -112,9 +118,14 @@ class Property(ModelSQL, ModelView): for field in fields: if field.ttype == 'many2one': obj = self.pool.get(field.relation) + id_found.setdefault(field.relation, set()) + if set(res[field.name].values()).issubset( + id_found[field.relation]): + continue obj_ids = obj.search(cursor, user, [ ('id', 'in', res[field.name].values()), ], order=[], context=context) + id_found[field.relation].update(obj_ids) for res_id in res[field.name]: if res[field.name][res_id] not in obj_ids: res[field.name][res_id] = False