changeset ce0db69ea4d6 in trytond:default details: https://hg.tryton.org/trytond?cmd=changeset;node=ce0db69ea4d6 description: Compute once selection field's value when possible
issue9222 review309331002 diffstat: trytond/model/modelstorage.py | 17 ++++++++++------- 1 files changed, 10 insertions(+), 7 deletions(-) diffs (34 lines): diff -r f31183ed4f25 -r ce0db69ea4d6 trytond/model/modelstorage.py --- a/trytond/model/modelstorage.py Thu Dec 10 23:05:58 2020 +0100 +++ b/trytond/model/modelstorage.py Fri Dec 11 11:57:10 2020 +0100 @@ -1302,6 +1302,14 @@ if hasattr(field, 'selection') and field.selection: if isinstance(field.selection, (tuple, list)): test = set(dict(field.selection).keys()) + instance_sel_func = False + else: + sel_func = getattr(cls, field.selection) + instance_sel_func = is_instance_method( + cls, field.selection) + if not instance_sel_func: + test = set(dict(sel_func())) + for record in records: value = getattr(record, field_name) if field._type == 'reference': @@ -1309,13 +1317,8 @@ value = value.__class__.__name__ elif value: value, _ = value.split(',') - if not isinstance(field.selection, (tuple, list)): - sel_func = getattr(cls, field.selection) - if not is_instance_method(cls, field.selection): - test = sel_func() - else: - test = sel_func(record) - test = set(dict(test)) + if instance_sel_func: + test = set(dict(sel_func(record))) # None and '' are equivalent if '' in test or None in test: test.add('')