From 6cd17d575c7d970286ec3dfedcfacf01be5f7592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Fri, 17 Nov 2017 13:17:16 +0100 Subject: [FIX] web: properly refetch x2manys in some cases Consider the following situation: a form view with a one2many which contains sub x2many fields (for example a m2m_tags). Suppose that the one2many has more than 40 records. Before this commit, trying to delete one of these records caused a crash. The reason is that when we delete a record, we need to reload the missing records in the one2many field. We actually do that with a _readUngroupedList. However, the _readUngroupedList method did not process x2many fields, so the information stored in the datapoints was 'raw', and the rest of the web client expected it to be a datapoint. To reproduce the issue in the testing environment, i had to use onchanges and a readonly attrs, to reach a situation where a crash could occur. This shows that, while the issue is critical, it was not totally trivial to be impacted by it. --- addons/web/static/src/js/views/basic/basic_model.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'addons/web/static/src/js/views/basic/basic_model.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 fcd9785b9a5..ed18be034af 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1573,7 +1573,9 @@ var BasicModel = AbstractModel.extend({ return $.when.apply($, defs).then(function () { // ensure to fetch up to 'limit' records (may be useful if records of // the current page have been removed) - return self._readUngroupedList(list); + return self._readUngroupedList(list).then(function () { + return self._fetchX2ManysBatched(list); + }); }); }, /** -- cgit v1.2.3 From fd7b767637cd9563e9869adf537150867925f120 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9ry=20Debongnie?= Date: Mon, 20 Nov 2017 15:17:23 +0100 Subject: [FIX] web: empty field char should be set to false With the new views, empty char fields were sent to the server as '' (empty string) instead of false. This is not the correct behaviour, and actually cause some problems. For example, if you have a char field with a unicity constraint, then you cannot set it to '', since there is only one record that can take that value. --- addons/web/static/src/js/views/basic/basic_model.js | 2 ++ 1 file changed, 2 insertions(+) (limited to 'addons/web/static/src/js/views/basic/basic_model.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 ed18be034af..e8f4a3993fa 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -2499,6 +2499,8 @@ var BasicModel = AbstractModel.extend({ changes[fieldName] = value ? this.localData[value].model + ',' + this.localData[value].res_id : false; + } else if (type === 'char' && changes[fieldName] === '') { + changes[fieldName] = false; } else if (changes[fieldName] === null) { changes[fieldName] = false; } -- cgit v1.2.3