summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2017-05-03 09:57:19 +0200
committerAaron Bohy <aab@odoo.com>2017-05-03 20:48:25 +0200
commitc7fc74fb791226dfbf30adfaacaf16e4e1b64953 (patch)
tree888434e3037722a5f0411388713a5a8206e2a05e /addons/web/static/src/js
parentd56baebc8e7f654304eca59b3c58ceb80846c659 (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')
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js16
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 = [];