From c7fc74fb791226dfbf30adfaacaf16e4e1b64953 Mon Sep 17 00:00:00 2001 From: Aaron Bohy Date: Wed, 3 May 2017 09:57:19 +0200 Subject: [FIX] web: BasicModel: fetch added x2many records Suppose that there is a many2many (list) field in a form view, and there is a many2many (e.g. many2many_tags) field inside the list. In edit mode, if the user adds a record in the relation, this record and its relational data should be fetched. Before this rev., the relational data wasn't fetched, so the many2many_tags couldn't be displayed correctly. --- addons/web/static/src/js/views/basic/basic_model.js | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'addons/web/static/src/js/views/basic') 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 93c0dd7c40c..fd47e931317 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1119,6 +1119,7 @@ var BasicModel = AbstractModel.extend({ list_records[record.id].data = record; self._parseServerData(fieldNames, list.fields, record); }); + return self._fetchX2ManysBatched(list); }); defs.push(def); } @@ -1645,11 +1646,21 @@ var BasicModel = AbstractModel.extend({ var fieldsInfo = view ? view.fieldsInfo : fieldInfo.fieldsInfo; var fields = view ? view.fields : fieldInfo.relatedFields; var viewType = view ? view.type : fieldInfo.viewType; + var data = list._changes || list.data; + var x2mRecords = []; // step 1: collect ids var ids = []; - _.each(list.data, function (dataPoint) { + _.each(data, function (dataPoint) { var record = self.localData[dataPoint]; + if (typeof record.data[fieldName] === 'string') { + // in this case, the value is a local ID, which means that the + // record has already been processed. It can happen for example + // when a user adds a record in a m2m relation, or loads more + // records in a kanban column + return; + } + x2mRecords.push(record); ids = _.unique(ids.concat(record.data[fieldName] || [])); var m2mList = self._makeDataPoint({ fieldsInfo: fieldsInfo, @@ -1696,8 +1707,7 @@ var BasicModel = AbstractModel.extend({ }); }); - _.each(list.data, function (dataPoint) { - var record = self.localData[dataPoint]; + _.each(x2mRecords, function (record) { var m2mList = self.localData[record.data[fieldName]]; m2mList.data = []; -- cgit v1.2.3