diff --git a/addons/web/static/src/js/views/form/form_view.js b/addons/web/static/src/js/views/form/form_view.js index 01474a01180..fb228f5a636 100644 --- a/addons/web/static/src/js/views/form/form_view.js +++ b/addons/web/static/src/js/views/form/form_view.js @@ -97,9 +97,14 @@ var FormView = BasicView.extend({ while (matches = regex.exec(attrs.context)) { context[matches[1]] = matches[2]; } + + // Remove *_view_ref coming from parent view + var refinedContext = _.pick(self.loadParams.context, function (value, key) { + return key.indexOf('_view_ref') === -1; + }); defs.push(parent.loadViews( field.relation, - new Context(context, self.userContext, self.loadParams.context).eval(), + new Context(context, self.userContext, refinedContext).eval(), [[null, attrs.mode === 'tree' ? 'list' : attrs.mode]]) .then(function (views) { for (var viewName in views) { diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index ada27d09afc..8099c58092a 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -17,6 +17,7 @@ var Widget = require('web.Widget'); var _t = core._t; var createView = testUtils.createView; var createAsyncView = testUtils.createAsyncView; +var createActionManager = testUtils.createActionManager; QUnit.module('Views', { beforeEach: function () { @@ -315,7 +316,78 @@ QUnit.module('Views', { "should contain an inner group"); form.destroy(); }); + QUnit.test('Form and subview with _view_ref contexts', function (assert) { + assert.expect(2); + this.data.product.fields.partner_type_ids = {string: "one2many field", type: "one2many", relation: "partner_type"}, + this.data.product.records = [{id: 1, name: 'Tromblon', partner_type_ids: [12,14]}]; + this.data.partner.records[0].product_id = 1; + + var actionManager = createActionManager({ + data: this.data, + archs: { + 'product,false,form': '
', + + 'partner_type,false,list': '