changeset cb33acf83d2a in trytond:5.6
details: https://hg.tryton.org/trytond?cmd=changeset;node=cb33acf83d2a
description:
        Include recursively the depends of the depends into the view

        The value of a field, added to the view because it is a depends, may 
not be
        correctly computed if it is missing its own depends.

        issue9828
        review292751003
        (grafted from ed013c8c65fe3af1ce8ed6810562a80567d8a7f4)
diffstat:

 trytond/model/modelview.py |  16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

diffs (31 lines):

diff -r ed41633a797c -r cb33acf83d2a trytond/model/modelview.py
--- a/trytond/model/modelview.py        Wed Nov 11 15:50:49 2020 +0100
+++ b/trytond/model/modelview.py        Mon Nov 23 23:33:59 2020 +0100
@@ -493,17 +493,21 @@
                 if hasattr(field, 'field'):
                     fields_def.setdefault(field.field, {'name': field.field})
 
-        for field_name in list(fields_def.keys()):
+        for depend in view_depends:
+            if depend not in fields_to_remove:
+                fields_def.setdefault(depend, {'name': depend})
+
+        field_names = list(fields_def.keys())
+        while field_names:
+            field_name = field_names.pop()
             if field_name in cls._fields:
                 field = cls._fields[field_name]
             else:
                 continue
             for depend in field.depends:
-                fields_def.setdefault(depend, {'name': depend})
-
-        for depend in view_depends:
-            if depend not in fields_to_remove:
-                fields_def.setdefault(depend, {'name': depend})
+                if depend not in fields_def:
+                    fields_def[depend] = {'name': depend}
+                    field_names.append(depend)
 
         arch = etree.tostring(
             tree, encoding='utf-8', pretty_print=False).decode('utf-8')

Reply via email to