diff options
| author | Géry Debongnie <ged@odoo.com> | 2017-05-18 10:45:36 +0200 |
|---|---|---|
| committer | Géry Debongnie <ged@odoo.com> | 2017-05-18 11:33:32 +0200 |
| commit | 3dd97db07fcf22bf1dd7fcaa912a20438483bc7c (patch) | |
| tree | 12d227b1c24387784005f4dfc6530a1d72a6a3e9 /addons/web/static/src/js | |
| parent | ba6a3a91ae78297c7f8ddcf7630ecef46048c15e (diff) | |
[FIX] web: properly loads default values for many2manys
Many2many default value can be a list of ids, and in that case, we did
not properly load data.
It could be seen by selecting a few contacts (in list view), then
opening the 'Merge contact' wizard in the sidebar (action menu). Before
this commit, the wizard did show a list with some empty rows (for the
field partner_ids).
Diffstat (limited to 'addons/web/static/src/js')
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_model.js | 78 |
1 files changed, 33 insertions, 45 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 a55d2b2723b..046c810c437 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -2300,60 +2300,48 @@ var BasicModel = AbstractModel.extend({ record._changes[name] = x2manyList.id; var many2ones = {}; var r; + var isCommandList = result[name].length && _.isArray(result[name][0]); + if (!isCommandList) { + result[name] = [[6, false, result[name]]]; + } _.each(result[name], function (value) { - if (_.isArray(value)) { - // value is a command - if (value[0] === 0) { - // CREATE - r = self._makeDataPoint({ - modelName: x2manyList.model, - context: x2manyList.context, - fieldsInfo: fieldsInfo, - fields: fields, - viewType: viewType, - }); - x2manyList._changes = x2manyList._changes || []; - x2manyList._changes.push(r.id); - - // this is necessary so the fields are initialized - _.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') { - var rec = self._makeDataPoint({ - context: r.context, - modelName: r.fields[name].relation, - data: {id: r._changes[name]} - }); - r._changes[name] = rec.id; - many2ones[name] = true; - } - } - } - if (value[0] === 6) { - // REPLACE_WITH - x2manyList.res_ids = value[2]; - x2manyList.count = x2manyList.res_ids.length; - defs.push(self._readUngroupedList(x2manyList)); - } - } else { - // value is an id + // value is a command + if (value[0] === 0) { + // CREATE r = self._makeDataPoint({ modelName: x2manyList.model, context: x2manyList.context, fieldsInfo: fieldsInfo, fields: fields, - res_id: value, viewType: viewType, }); - if (!x2manyList._changes) { - x2manyList._changes = []; - } + x2manyList._changes = x2manyList._changes || []; x2manyList._changes.push(r.id); + + // this is necessary so the fields are initialized + _.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') { + var rec = self._makeDataPoint({ + context: r.context, + modelName: r.fields[name].relation, + data: {id: r._changes[name]} + }); + r._changes[name] = rec.id; + many2ones[name] = true; + } + } + } + if (value[0] === 6) { + // REPLACE_WITH + x2manyList.res_ids = value[2]; + x2manyList.count = x2manyList.res_ids.length; + defs.push(self._readUngroupedList(x2manyList)); } }); |
