[FIX] many2one: return (id,name) instead of only id also for osv_memory
By doing this small change we save clients the trouble of explicitly having to call name_get() for each m2o field in osv_memory objects, which they cannot trivially batch and represents a large dealy for wizards with possibly large numbers of child o2m records. An example is the linked bug, where partial picking of several hundred move lines would lead to as many separate name_get RPC calls, causing a noticeable delay. lp bug: https://launchpad.net/bugs/709567 fixed bzr revid: odo@openerp.com-20110202091546-rdsxn7wuby040m3r
This commit is contained in:
parent
d4c473f502
commit
b3b7a113af
|
@ -339,6 +339,20 @@ class many2one(_column):
|
|||
result = {}
|
||||
for id in ids:
|
||||
result[id] = obj.datas[id].get(name, False)
|
||||
|
||||
# build a dictionary of the form {'id_of_distant_resource': name_of_distant_resource}
|
||||
# we use uid=1 because the visibility of a many2one field value (just id and name)
|
||||
# must be the access right of the parent form and not the linked object itself.
|
||||
obj = obj.pool.get(self._obj)
|
||||
records = dict(obj.name_get(cr, 1,
|
||||
list(set([x for x in result.values() if x and isinstance(x, (int,long))])),
|
||||
context=context))
|
||||
for id in ids:
|
||||
if result[id] in records:
|
||||
result[id] = (result[id], records[result[id]])
|
||||
else:
|
||||
result[id] = False
|
||||
|
||||
return result
|
||||
|
||||
def get(self, cr, obj, ids, name, user=None, context=None, values=None):
|
||||
|
|
Loading…
Reference in New Issue