Do not use field definitions when exporting data
Calling Model.fields_get is expensive especially for each record to export. Closes #14061
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user