diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py index 48d051a24c2..dd3b9391db9 100644 --- a/odoo/addons/base/models/ir_ui_view.py +++ b/odoo/addons/base/models/ir_ui_view.py @@ -84,6 +84,9 @@ def transfer_node_to_modifiers(node, modifiers): attrs = node.attrib.pop('attrs', None) if attrs: modifiers.update(ast.literal_eval(attrs.strip())) + for a in ('invisible', 'readonly', 'required'): + if a in modifiers and isinstance(modifiers[a], int): + modifiers[a] = bool(modifiers[a]) states = node.attrib.pop('states', None) if states: diff --git a/odoo/addons/base/tests/test_views.py b/odoo/addons/base/tests/test_views.py index 4ee19f5d3b6..15ac8377fe7 100644 --- a/odoo/addons/base/tests/test_views.py +++ b/odoo/addons/base/tests/test_views.py @@ -1792,7 +1792,7 @@ class TestViews(ViewCase): node = etree.fromstring(what) if isinstance(what, str) else what transfer_node_to_modifiers(node, modifiers) simplify_modifiers(modifiers) - assert modifiers == expected, "%s != %s" % (modifiers, expected) + assert str(modifiers) == str(expected), "%s != %s" % (modifiers, expected) _test_modifiers('', {}) _test_modifiers('', {"invisible": True}) @@ -1801,6 +1801,14 @@ class TestViews(ViewCase): _test_modifiers('', {}) _test_modifiers('', {}) _test_modifiers('', {}) + _test_modifiers( + """""", + {"readonly": True}, + ) + _test_modifiers( + """""", + {}, + ) # TODO: Order is not guaranteed _test_modifiers( '',