diff --git a/addons/website/models/ir_module_module.py b/addons/website/models/ir_module_module.py index 86286a9fd2c..705c0b44316 100644 --- a/addons/website/models/ir_module_module.py +++ b/addons/website/models/ir_module_module.py @@ -162,6 +162,8 @@ class IrModuleModule(models.Model): # at update, ignore active field if 'active' in rec_data: rec_data.pop('active') + if model_name == 'ir.ui.view' and (find.arch_updated or find.arch == rec_data['arch']): + rec_data.pop('arch') find.update(rec_data) self._post_copy(rec, find) else: diff --git a/addons/website/tests/test_views.py b/addons/website/tests/test_views.py index 6abcef13aaf..9f19cdcc303 100644 --- a/addons/website/tests/test_views.py +++ b/addons/website/tests/test_views.py @@ -1309,3 +1309,11 @@ class TestThemeViews(common.TransactionCase): specific_main_view_children = specific_main_view.inherit_children_ids self.assertEqual(specific_main_view_children.name, 'Test Child View', "Ensure theme.ir.ui.view has been loaded as an ir.ui.view into the website..") self.assertEqual(specific_main_view_children.website_id, website_1, "..and the website is the correct one.") + + # 4. Keep User arch changes + new_arch = 'Odoo' + specific_main_view_children.arch = new_arch + theme_view.name = 'Test Child View modified' + test_theme_module.with_context(load_all_views=True)._theme_load(website_1) + self.assertEqual(specific_main_view_children.arch, new_arch, "View arch shouldn't have been overrided on theme update as it was modified by user.") + self.assertEqual(specific_main_view_children.name, 'Test Child View modified', "View should receive modification on theme update.")