diff options
| author | Aaron Bohy <aab@odoo.com> | 2017-05-15 10:19:44 +0200 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2017-05-16 08:49:26 +0200 |
| commit | 55de60db6e2fb7851526c258f1801f7d321974b7 (patch) | |
| tree | 7eacd147983167a8be904f55294ceaf2014e595a /addons/web/static/src/js/views/basic/basic_model.js | |
| parent | 5f13b7f019a0aa56dabd426bb33b3be93f2954b0 (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.js | 6 |
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') { |
