diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js index 82351645c26..d904f8f1ec7 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -2075,7 +2075,8 @@ var BasicModel = AbstractModel.extend({ } for (var name in r._changes) { - if (r.fields[name].type === 'many2one') { + var isFieldInView = name in r.fields; + if (isFieldInView && r.fields[name].type === 'many2one') { var rec = self._makeDataPoint({ context: r.context, modelName: r.fields[name].relation, diff --git a/addons/web/static/test/views/form_tests.js b/addons/web/static/test/views/form_tests.js index 83f337e7799..fbf31974e86 100644 --- a/addons/web/static/test/views/form_tests.js +++ b/addons/web/static/test/views/form_tests.js @@ -33,6 +33,7 @@ QUnit.module('Views', { state: {string: "State", type: "selection", selection: [["ab", "AB"], ["cd", "CD"], ["ef", "EF"]]}, date: {string: "Some Date", type: "date"}, datetime: {string: "Datetime Field", type: 'datetime'}, + product_ids: {string: "one2many product", type: "one2many", relation: "product"}, }, records: [{ id: 1, @@ -67,7 +68,8 @@ QUnit.module('Views', { }, product: { fields: { - name: {string: "Product Name", type: "char"} + name: {string: "Product Name", type: "char"}, + partner_type_id: {string: "Partner type", type: "many2one", relation: "partner_type"}, }, records: [{ id: 37, @@ -2632,5 +2634,46 @@ QUnit.module('Views', { "the value rendered should be the same than the field value"); form.destroy(); }); + + QUnit.test('one2many default value creation', function (assert) { + assert.expect(1); + + this.data.partner.records[0].product_ids = [37]; + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '
', + mockRPC: function (route, args) { + if (args.method === 'default_get') { + return $.when({ + product_ids: [[0, 0, { + name: 'xdroid', + partner_type_id: 12, + }]] + }); + } + if (args.method === 'create') { + var command = args.args[0].product_ids[0]; + assert.strictEqual(command[2].partner_type_id, 12, + "the default partner_type_id should be equal to 12"); + } + return this._super.apply(this, arguments); + }, + }); + form.$buttons.find('.o_form_button_save').click(); + form.destroy(); + }); }); });