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 7e42ad6cfca..a4c6d0e8795 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -818,6 +818,16 @@ var BasicModel = AbstractModel.extend({ defs.push(self._fetchNameGet(dataPoint)); } } + } else if (field.type === 'reference' && field.value) { + const ref = field.value.split(','); + dataPoint = self._makeDataPoint({ + context: record.context, + data: { id: parseInt(ref[1], 10) }, + modelName: ref[0], + parentID: record.id, + }); + defs.push(self._fetchNameGet(dataPoint)); + record.data[field.name] = dataPoint.id; } else if (field.type === 'one2many' || field.type === 'many2many') { var relatedFieldsInfo = {}; relatedFieldsInfo.default = {}; diff --git a/addons/web/static/tests/views/basic_model_tests.js b/addons/web/static/tests/views/basic_model_tests.js index 7a20552968e..326c8550bb5 100644 --- a/addons/web/static/tests/views/basic_model_tests.js +++ b/addons/web/static/tests/views/basic_model_tests.js @@ -1884,6 +1884,33 @@ odoo.define('web.basic_model_tests', function (require) { model.destroy(); }); + QUnit.test('call makeRecord with a reference field', async function (assert) { + assert.expect(2); + let rpcCount = 0; + + const model = createModel({ + Model: BasicModel, + data: this.data, + mockRPC: function (route, args) { + rpcCount++; + return this._super(route, args); + }, + }); + + const field = this.data.partner.fields.reference; + const recordID = await model.makeRecord('coucou', [{ + name: 'reference', + type: 'reference', + selection: field.selection, + value: 'product,37', + }]); + const record = model.get(recordID); + assert.deepEqual(record.data.reference.data, { id: 37, display_name: 'xphone' }); + assert.strictEqual(rpcCount, 1); + + model.destroy(); + }); + QUnit.test('check id, active_id, active_ids, active_model values in record\'s context', async function (assert) { assert.expect(2);