From 5e560afbdcd0da760df308ba2bf47e3bc69e0c40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Tue, 10 Jun 2025 14:29:07 +0200 Subject: [PATCH] Do not use field definitions when exporting data Calling Model.fields_get is expensive especially for each record to export. Closes #14061 --- trytond/trytond/model/modelstorage.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/trytond/trytond/model/modelstorage.py b/trytond/trytond/model/modelstorage.py index 5c456a1abc..00023861e1 100644 --- a/trytond/trytond/model/modelstorage.py +++ b/trytond/trytond/model/modelstorage.py @@ -886,7 +886,6 @@ class ModelStorage(Model): field_name, language = field_name.split(':lang=') eModel = pool.get(value.__name__) field = eModel._fields[field_name] - field_def = eModel.fields_get()[field_name] if field.states and 'invisible' in field.states: invisible = _record_eval_pyson( value, field.states['invisible']) @@ -899,7 +898,7 @@ class ModelStorage(Model): value = field.translated().__get__(value, eModel)(language) else: value = getattr(value, field_name) - if field_def['type'] in {'one2many', 'many2many'}: + if field._type in {'one2many', 'many2many'}: first = True child_fields_names = [(x[:i + 1] == fields_tree[:i + 1] and x[i + 1:]) or [] for x in fields_names] @@ -928,7 +927,7 @@ class ModelStorage(Model): if value is None: value = '' elif isinstance(value, Model): - if field_def['type'] == 'reference': + if field._type == 'reference': value = f'{value.__name__},{value.rec_name}' else: value = value.rec_name