summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/basic/basic_model.js
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2017-08-30 18:18:59 +0200
committerChristophe Simonis <chs@odoo.com>2017-08-30 18:18:59 +0200
commit71f370903c5f0777416ae74b9d21ff90047a99a1 (patch)
tree69422174b7ed784e407466c4fe69397bc0a722b1 /addons/web/static/src/js/views/basic/basic_model.js
parent4ec6069accb862beead8377247a9ca6b128d37ed (diff)
parent600d01593870061b370ecf12d97acafe93b96c59 (diff)
[MERGE] forward port branch saas-16 up to 600d0159387
Diffstat (limited to 'addons/web/static/src/js/views/basic/basic_model.js')
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js21
1 files changed, 17 insertions, 4 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 d54f609f002..4e3e5823223 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -1629,8 +1629,8 @@ var BasicModel = AbstractModel.extend({
*/
_fetchRecord: function (record, options) {
var self = this;
- var fieldNames = options && options.fieldNames ||
- _.uniq(record.getFieldNames().concat(['display_name']));
+ var fieldNames = options && options.fieldNames || record.getFieldNames();
+ fieldNames = _.uniq(fieldNames.concat(['display_name']));
return this._rpc({
model: record.model,
method: 'read',
@@ -2043,7 +2043,7 @@ var BasicModel = AbstractModel.extend({
if (record.data.hasOwnProperty(domainModel)) {
domainModel = record._changes && record._changes[domainModel] || record.data[domainModel];
}
- var domainValue = record._changes && record._changes[fieldName] || record.data[fieldName];
+ var domainValue = record._changes && record._changes[fieldName] || record.data[fieldName] || [];
// avoid rpc if not necessary
var hasChanged = this._saveSpecialDataCache(record, fieldName, {
@@ -2337,6 +2337,16 @@ var BasicModel = AbstractModel.extend({
_generateOnChangeData: function (record) {
var commands = this._generateX2ManyCommands(record, {withReadonly: true});
var data = _.extend(this.get(record.id, {raw: true}).data, commands);
+ // 'display_name' is automatically added to the list of fields to fetch,
+ // when fetching a record, even if it doesn't appear in the view. However,
+ // only the fields in the view must be passed to the onchange RPC, so we
+ // remove it from the data sent by RPC if it isn't in the view.
+ var hasDisplayName = _.some(record.fieldsInfo, function (fieldsInfo) {
+ return 'display_name' in fieldsInfo;
+ });
+ if (!hasDisplayName) {
+ delete data.display_name;
+ }
// one2many records have a parentID
if (record.parentID) {
@@ -2397,7 +2407,10 @@ var BasicModel = AbstractModel.extend({
_.each(list._changes, function (change) {
if (change.operation === 'ADD') {
relRecordAdded.push(self.localData[change.id]);
- } else if (change.operation === 'UPDATE') {
+ } else if (change.operation === 'UPDATE' && !self.isNew(change.id)) {
+ // ignore new records that would have been updated
+ // afterwards, as all their changes would already
+ // be aggregated in the CREATE command
relRecordUpdated.push(self.localData[change.id]);
}
});