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(