From d8f03e64fd46f45446c69f6b851813c559d0d5c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Thu, 19 Oct 2017 10:08:38 +0200 Subject: [PATCH] [FIX] web: do not send id in update commands for m2m When we generate commands for many2many, it could happen that the id was in the list of changed fields (when we are in a new records, with a non empty initial onchange). When this happens, the server is not happy. To reproduce this, open the uninstall wizard of a module in the 'App' application. This creates a new record with a non-empty many2many field. Then click on 'Show technical modules', this will trigger an onchange which should not send the id field. --- .../static/src/js/views/basic/basic_model.js | 4 +-- .../tests/fields/relational_fields_tests.js | 36 +++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) 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 8798e8cdb2e..3591ac3cf94 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -2595,6 +2595,7 @@ var BasicModel = AbstractModel.extend({ _.each(relRecordUpdated, function (relRecord) { var changes = self._generateChanges(relRecord, options); if (!_.isEmpty(changes)) { + delete changes.id; var command = x2ManyCommands.update(relRecord.res_id, changes); commands[fieldName].push(command); } @@ -2626,9 +2627,8 @@ var BasicModel = AbstractModel.extend({ relRecord = _.findWhere(relRecordAdded, {res_id: list.res_ids[i]}); changes = this._generateChanges(relRecord, options); if ('id' in changes) { - var id = changes.id; delete changes.id; - commands[fieldName].push(x2ManyCommands.update(id, changes)); + commands[fieldName].push(x2ManyCommands.update(relRecord.res_id, changes)); } else { commands[fieldName].push(x2ManyCommands.create(changes)); } diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js index 5677443aa0f..b116f10de86 100644 --- a/addons/web/static/tests/fields/relational_fields_tests.js +++ b/addons/web/static/tests/fields/relational_fields_tests.js @@ -6633,6 +6633,42 @@ QUnit.module('relational_fields', { form.destroy(); }); + QUnit.test('default_get, onchange, onchange on m2m', function (assert) { + assert.expect(1); + + this.data.partner.onchanges.int_field = function (obj) { + if (obj.int_field === 2) { + assert.deepEqual(obj.timmy, [ + [6, false, [12]], + [1, 12, {display_name: 'gold'}] + ]); + } + obj.timmy = [ + [5], + [1, 12, {display_name: 'gold'}] + ]; + }; + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '
' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '' + + '
', + }); + + form.$('.o_field_widget[name=int_field]').val(2).trigger('input'); + form.destroy(); + }); + QUnit.module('FieldStatus'); QUnit.test('static statusbar widget on many2one field', function (assert) {