Cecile Tonglet (OpenERP) has proposed merging 
lp:~openerp-dev/openobject-server/trunk-bug-821583-cto into 
lp:openobject-server.

Requested reviews:
  OpenERP Core Team (openerp)
Related bugs:
  Bug #821583 in OpenERP Server: "many2one function fields are recomputed every 
time even with store=True"
  https://bugs.launchpad.net/openobject-server/+bug/821583

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-bug-821583-cto/+merge/94245

Prevent get to call many2one functions if store=True at each read
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/trunk-bug-821583-cto/+merge/94245
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openobject-server/trunk-bug-821583-cto.
=== modified file 'openerp/osv/fields.py'
--- openerp/osv/fields.py	2012-02-15 13:37:48 +0000
+++ openerp/osv/fields.py	2012-02-22 18:28:26 +0000
@@ -1121,7 +1121,15 @@
         return result
 
     def get(self, cr, obj, ids, name, uid=False, context=None, values=None):
-        result = self._fnct(obj, cr, uid, ids, name, self._arg, context)
+        if self._multi:
+            result = dict([v['id'], v] for v in values) if values else {}
+            ids_missing = [id for id in ids if \
+                           not all(result.get(id, {}).get(n) for n in name)]
+        else:
+            result = dict([v['id'], v.get(name)] for v in values) if values else {}
+            ids_missing = [id for id in ids if not result.get(id)]
+        if ids_missing:
+            result.update(self._fnct(obj, cr, uid, ids_missing, name, self._arg, context))
         for id in ids:
             if self._multi and id in result:
                 for field, value in result[id].iteritems():

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to