diff --git a/addons/web/static/src/legacy/js/fields/relational_fields.js b/addons/web/static/src/legacy/js/fields/relational_fields.js index 7a7f916e677..4c949da8c9b 100644 --- a/addons/web/static/src/legacy/js/fields/relational_fields.js +++ b/addons/web/static/src/legacy/js/fields/relational_fields.js @@ -3587,7 +3587,7 @@ var FieldReference = FieldMany2One.extend({ _applyModelField: function (initRecord) { let resourceRef = this.record.specialData[this.name]; if (resourceRef) { - if (initRecord && resourceRef.hasChanged) { + if (initRecord && resourceRef.hasChanged && resourceRef.modelName !== this.modelName) { this.reinitialize(false); } this.modelName = resourceRef.modelName; @@ -3646,7 +3646,8 @@ var FieldReference = FieldMany2One.extend({ } if (this.nodeOptions.model_field) { this._applyModelField(initRecord); - } else if (this.value && this.value.model) { + } + if (this.value && this.value.model) { this.modelName = this.value.model; } if (this.modelName) { diff --git a/addons/web/static/tests/legacy/fields/relational_fields_tests.js b/addons/web/static/tests/legacy/fields/relational_fields_tests.js index 1757d121347..9284ec24ffb 100644 --- a/addons/web/static/tests/legacy/fields/relational_fields_tests.js +++ b/addons/web/static/tests/legacy/fields/relational_fields_tests.js @@ -3267,6 +3267,53 @@ QUnit.module('relational_fields', { form.destroy(); }); + QUnit.test('widget reference with model_field option (tree list in form view)', async function (assert) { + assert.expect(2); + + this.data.turtle.records[0].partner_ids = [1]; + this.data.partner.records[0].reference = 'product,41'; + this.data.partner.records[0].model_id = 20; + + const form = await createView({ + View: FormView, + model: 'turtle', + data: this.data, + arch: `
+ + + + + + + +
`, + res_id: 1, + }); + + await testUtils.form.clickEdit(form); + + assert.strictEqual(form.$('.reference_field').text(), 'xpad', + 'should have the second product'); + + // Select the second product without changing the model + await testUtils.dom.click($('.o_list_table .reference_field')); + await testUtils.dom.click($('.o_list_table .reference_field input')); + + + // Enter to select it + $('.o_list_table .reference_field input').trigger($.Event('keydown', { + keyCode: $.ui.keyCode.ENTER, + which: $.ui.keyCode.ENTER, + })); + + await testUtils.nextTick(); + + assert.strictEqual(form.$('.reference_field[name="reference"]').text(), 'xphone', + 'should have selected the first product'); + + form.destroy(); + }); + QUnit.test('one2many with extra field from server not in form', async function (assert) { assert.expect(6);