diff options
| author | Elkasitu <adt@odoo.com> | 2017-07-25 10:28:18 +0200 |
|---|---|---|
| committer | Elkasitu <adt@odoo.com> | 2017-07-25 12:04:19 +0200 |
| commit | a4e30a1b43d0b9acd76508d9e6c466cd1dbdffab (patch) | |
| tree | 720cfabfcabfe4df23f6790531f88a5a782655fc /addons/web/static/src/js/fields/relational_fields.js | |
| parent | a41db9a2cf410bb233b021651a5633180eaddf18 (diff) | |
[FIX] web: prevent crash in FieldReference
Trying to display external identifiers would make the server crash
because the method in charge of requesting the external id information
would expect an object but it was being given a string and thus not
computing the m2o_value for the record.
This commit fixes this by changing FieldMany2One objects' m2o_value
instatiation to use its _formatValue method to compute it, _formatValue
is then overridden in FieldReference so that it properly handles both
strings and objects to calculate its m2o_value and relation.
Diffstat (limited to 'addons/web/static/src/js/fields/relational_fields.js')
| -rw-r--r-- | addons/web/static/src/js/fields/relational_fields.js | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js index 7522bb3bc37..89fcb4fe406 100644 --- a/addons/web/static/src/js/fields/relational_fields.js +++ b/addons/web/static/src/js/fields/relational_fields.js @@ -99,7 +99,7 @@ var FieldMany2One = AbstractField.extend({ this.nodeOptions = _.defaults(this.nodeOptions, { quick_create: true, }); - this.m2o_value = field_utils.format.many2one(this.value); + this.m2o_value = this._formatValue(this.value); // 'recordParams' is a dict of params used when calling functions // 'getDomain' and 'getContext' on this.record this.recordParams = {fieldName: this.name, viewType: this.viewType}; @@ -2029,7 +2029,20 @@ var FieldReference = FieldMany2One.extend({ // needs to be copied as it is an unmutable object this.field = _.extend({}, this.field); if (this.value) { - this._setRelation(this.value.model); + var model = null; + // The value of a Reference field can either be a string in the form + // of model,record_id or an object + if (typeof this.value === "string") { + var value = this.value.split(','); + model = value[0]; + this.value = { + res_id: parseInt(value[1]), + }; + } else { + model = this.value.model; + } + + this._setRelation(model); } }, /** @@ -2045,6 +2058,15 @@ var FieldReference = FieldMany2One.extend({ //-------------------------------------------------------------------------- /** + * Get the encompassing record's display_name + * + * @override + */ + _formatValue: function () { + return this.recordData.display_name; + }, + + /** * Add a select in edit mode (for the model). * * @override |
