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('')

Reply via email to