diff --git a/openerp/addons/base/ir/ir_ui_view.py b/openerp/addons/base/ir/ir_ui_view.py index 2e74f116223..fc0edc24676 100644 --- a/openerp/addons/base/ir/ir_ui_view.py +++ b/openerp/addons/base/ir/ir_ui_view.py @@ -311,7 +311,11 @@ class view(osv.osv): user = self.pool['res.users'].browse(cr, 1, uid, context=context) user_groups = frozenset(user.groups_id or ()) - conditions = [['inherit_id', '=', view_id], ['model', '=', model]] + conditions = [ + ['inherit_id', '=', view_id], + ['model', '=', model], + ['mode', '=', 'extension'], + ] if self.pool._init: # Module init currently in progress, only consider views from # modules whose code is already loaded diff --git a/openerp/addons/base/tests/test_views.py b/openerp/addons/base/tests/test_views.py index 180bb6bff8a..07cd4715b83 100644 --- a/openerp/addons/base/tests/test_views.py +++ b/openerp/addons/base/tests/test_views.py @@ -965,6 +965,14 @@ class TestViewCombined(ViewCase): 'inherit_id': self.a1, 'arch': '' }) + # mode=primary should be an inheritance boundary in both direction, + # even within a model it should not extend the parent + self.a4 = self.create({ + 'model': 'a', + 'inherit_id': self.a1, + 'mode': 'primary', + 'arch': '', + }) self.b1 = self.create({ 'model': 'b', @@ -1031,6 +1039,17 @@ class TestViewCombined(ViewCase): E.a2(), ), arch) + def test_read_from_child_primary(self): + arch = self.read_combined(self.a4)['arch'] + self.assertEqual( + ET.fromstring(arch), + E.qweb( + E.a1(), + E.a4(), + E.a3(), + E.a2(), + ), arch) + def test_cross_model_simple(self): arch = self.read_combined(self.c2)['arch'] self.assertEqual(