[FIX] web: default_get on x2many may return a list of ids

This commit is contained in:
Aaron Bohy
2017-04-11 19:44:38 +02:00
parent 928af2b51f
commit 8d2336abb3
2 changed files with 68 additions and 26 deletions
@@ -500,38 +500,55 @@ var BasicModel = AbstractModel.extend({
});
record._changes[name] = x2manyList.id;
var many2ones = {};
_.each(result[name], function (command) {
if (command[0] === 0) {
// CREATE
var r = self._makeDataPoint({
var r;
_.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,
fields: field.relatedFields,
fieldAttrs: field.fieldAttrs,
});
x2manyList._changes.push(r.id);
r._changes = value[2];
// this is necessary so the fields are initialized
for (var fieldName in value[2]) {
r.data[fieldName] = null;
}
for (var name in r._changes) {
if (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._changes = [];
}
} else {
// value is an id
r = self._makeDataPoint({
modelName: x2manyList.model,
context: x2manyList.context,
fields: field.relatedFields,
fieldAttrs: field.fieldAttrs,
res_id: value,
});
if (!x2manyList._changes) {
x2manyList._changes = [];
}
x2manyList._changes.push(r.id);
r._changes = command[2];
// this is necessary so the fields are initialized
for (var fieldName in command[2]) {
r.data[fieldName] = null;
}
for (var name in r._changes) {
if (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 (command[0] === 6) {
// REPLACE_WITH
x2manyList._changes = [];
}
});
@@ -810,5 +810,30 @@ QUnit.module('Views', {
model.destroy();
});
QUnit.test('default_get on x2many may return a list of ids', function (assert) {
assert.expect(1);
this.data.partner.fields.category.default = [12, 14];
var model = createModel({
Model: BasicModel,
data: this.data,
});
var params = {
fieldNames: ['category'],
fields: this.data.partner.fields,
modelName: 'partner',
};
model.makeDefaultRecord('partner', params).then(function (resultID) {
var record = model.get(resultID);
assert.ok(_.isEqual(record.data.category.res_ids, [12, 14]),
"category field should have correct default value");
});
model.destroy();
});
});});