From 4efa4e9d9420d0283c8d7b9683d13d3cd0907400 Mon Sep 17 00:00:00 2001 From: Martin Geubelle Date: Thu, 17 Aug 2017 18:37:25 +0200 Subject: [FIX] web: BasicModel: default_get: correctly fetch m2o inside o2m In general (e.g. read, search_read), values for many2one fields are pairs [id, display_name]. The default_get is an exception, it only returns the id, so we need to manually perform a name_get afterwards. In the case of list views, those name_get RPCs are batched. Before this rev., the code in charge of it didn't handle the case where the many2one value was false, so it crashed when it happened. This rev. deals with this use case and a test case has been added. --- addons/web/static/src/js/views/basic/basic_model.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'addons/web/static/src/js') 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 819eb978b48..3bfab5e3eb6 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1576,15 +1576,17 @@ var BasicModel = AbstractModel.extend({ var self = this; var model; var records = []; + var ids = []; list = this._applyX2ManyOperations(list); - var ids = _.map(list.data, function (localId) { + _.each(list.data, function (localId) { var record = self.localData[localId]; var data = record._changes || record.data; var many2oneId = data[fieldName]; + if (!many2oneId) { return; } var many2oneRecord = self.localData[many2oneId]; records.push(many2oneRecord); + ids.push(many2oneRecord.res_id); model = many2oneRecord.model; - return many2oneRecord.res_id; }); return this._rpc({ model: model, -- cgit v1.2.3