summaryrefslogtreecommitdiff
path: root/addons/web/static/src/js/views/basic/basic_model.js
diff options
context:
space:
mode:
authorAaron Bohy <aab@odoo.com>2017-05-15 10:19:44 +0200
committerAaron Bohy <aab@odoo.com>2017-05-16 08:49:26 +0200
commit55de60db6e2fb7851526c258f1801f7d321974b7 (patch)
tree7eacd147983167a8be904f55294ceaf2014e595a /addons/web/static/src/js/views/basic/basic_model.js
parent5f13b7f019a0aa56dabd426bb33b3be93f2954b0 (diff)
[FIX] web: BasicModel: missing fields in data for x2m
The 'data' attribute of exported datapoints (using 'get') must contain a value for each field in the view, and the default value is false when those fields are unset. The code manipulating those datapoints supposes that this is the case and it makes it easier and clean. However, it wasn't the case for x2manys in new records for which the default value contains CREATE commands with missing fields: in that case, those missing fields weren't added in data. This caused a crash in the Employee form view, in edit, if the user clicked on 'Create and Edit' of the 'Working hours' field, because some code in field_utils assumes that if the value of a date field isn't false, it means that it is a moment instance (but in that particular case it was undefined).
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.js6
1 files changed, 3 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 f6c4d6ea23b..5e5b36472f5 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -2314,13 +2314,13 @@ var BasicModel = AbstractModel.extend({
});
x2manyList._changes = x2manyList._changes || [];
x2manyList._changes.push(r.id);
- r._changes = value[2];
// this is necessary so the fields are initialized
- for (var fieldName in value[2]) {
+ _.each(r.getFieldNames(), function (fieldName) {
r.data[fieldName] = null;
- }
+ });
+ r._changes = _.defaults(value[2], r.data);
for (var name in r._changes) {
var isFieldInView = name in r.fields;
if (isFieldInView && r.fields[name].type === 'many2one') {