[IMP] fields: improve performance when reading many2one fields on records
Improve the performance of `name_get()` on many2one field values by making sure that the records on which `name_get` is invoked are prefetched in cache. This is not automatic, because `name_get` is invoked on records in another environment (sudo mode): the prefetching in the original environment should be reproduced in the other environment.
This commit is contained in:
parent
dc41a9b645
commit
021c1a26c5
|
@ -1482,7 +1482,11 @@ class Many2one(_Relational):
|
||||||
# many2one field value (id and name) depends on the current record's
|
# many2one field value (id and name) depends on the current record's
|
||||||
# access rights, and not the value's access rights.
|
# access rights, and not the value's access rights.
|
||||||
try:
|
try:
|
||||||
return value.sudo().name_get()[0]
|
value_sudo = value.sudo()
|
||||||
|
# performance trick: make sure that all records of the same
|
||||||
|
# model as value in value.env will be prefetched in value_sudo.env
|
||||||
|
value_sudo.env.prefetch[value._name].update(value.env.prefetch[value._name])
|
||||||
|
return value_sudo.name_get()[0]
|
||||||
except MissingError:
|
except MissingError:
|
||||||
# Should not happen, unless the foreign key is missing.
|
# Should not happen, unless the foreign key is missing.
|
||||||
return False
|
return False
|
||||||
|
|
Loading…
Reference in New Issue