diff options
| author | Aaron Bohy <aab@odoo.com> | 2017-05-03 09:57:19 +0200 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2017-05-03 20:48:25 +0200 |
| commit | c7fc74fb791226dfbf30adfaacaf16e4e1b64953 (patch) | |
| tree | 888434e3037722a5f0411388713a5a8206e2a05e /addons/web/static/src/js/views | |
| parent | d56baebc8e7f654304eca59b3c58ceb80846c659 (diff) | |
[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.
Diffstat (limited to 'addons/web/static/src/js/views')
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_model.js | 16 |
1 files changed, 13 insertions, 3 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 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 = []; |
