diff --git a/odoo/addons/base/ir/ir_ui_view.py b/odoo/addons/base/ir/ir_ui_view.py index 2e65e331a8e215965cccc19cd538c4b3cb59a060..feb2218711b662842b7d537d244256651cffcad4 100644 --- a/odoo/addons/base/ir/ir_ui_view.py +++ b/odoo/addons/base/ir/ir_ui_view.py @@ -330,7 +330,10 @@ actual arch. def _compute_defaults(self, values): if 'inherit_id' in values: - values.setdefault('mode', 'extension' if values['inherit_id'] else 'primary') + # Do not automatically change the mode if the view already has an inherit_id, + # and the user change it to another. + if not values['inherit_id'] or all(not view.inherit_id for view in self): + values.setdefault('mode', 'extension' if values['inherit_id'] else 'primary') return values @api.model diff --git a/odoo/addons/base/tests/test_views.py b/odoo/addons/base/tests/test_views.py index de7d2e060e6bd8317eea27fcfe9f0c6c071591bd..187e2e443d8b1ca6783010c78a72dd58952eec99 100644 --- a/odoo/addons/base/tests/test_views.py +++ b/odoo/addons/base/tests/test_views.py @@ -845,6 +845,12 @@ class ViewModeField(ViewCase): }) self.assertEqual(view2.mode, 'extension') + view2.write({'inherit_id': None}) + self.assertEqual(view2.mode, 'primary') + + view2.write({'inherit_id': view.id}) + self.assertEqual(view2.mode, 'extension') + @mute_logger('odoo.sql_db') def testModeExplicit(self): view = self.View.create({ @@ -857,6 +863,7 @@ class ViewModeField(ViewCase): 'arch': '<qweb/>' }) self.assertEqual(view.mode, 'primary') + self.assertEqual(view2.mode, 'primary') with self.assertRaises(IntegrityError): self.View.create({ @@ -908,6 +915,27 @@ class ViewModeField(ViewCase): view.write({'mode': 'primary'}) + def testChangeInheritOfPrimary(self): + """ + A primary view with an inherit_id must remain primary when changing the inherit_id + """ + base1 = self.View.create({ + 'inherit_id': None, + 'arch': '<qweb/>', + }) + base2 = self.View.create({ + 'inherit_id': None, + 'arch': '<qweb/>', + }) + view = self.View.create({ + 'mode': 'primary', + 'inherit_id': base1.id, + 'arch': '<qweb/>', + }) + self.assertEqual(view.mode, 'primary') + view.write({'inherit_id': base2.id}) + self.assertEqual(view.mode, 'primary') + class TestDefaultView(ViewCase): def testDefaultViewBase(self):