diff options
| author | Martin Geubelle <mge@odoo.com> | 2017-06-01 11:51:21 +0200 |
|---|---|---|
| committer | Martin Geubelle <mge@odoo.com> | 2017-06-01 13:23:30 +0200 |
| commit | 19cbbb21fb42e208bef55b4bcc62ed08cea4c742 (patch) | |
| tree | a96585ab35f7de2ef9a3fb92665bad91ed1ab787 /addons | |
| parent | 2f4d3d0e667092f70f44db03437473acf4ad5b32 (diff) | |
[FIX] web: handle ´domain´ widget rendering without model
When creating a new record where the ´domain´ widget is set in the view
with an associated model but this model field has no value, an rpc
(search_count) was done on an unknown model, that causes a traceback.
To avoid this, the rpc is not done if the model is not set.
Diffstat (limited to 'addons')
| -rw-r--r-- | addons/web/static/src/js/views/basic/basic_model.js | 5 | ||||
| -rw-r--r-- | addons/web/static/tests/views/form_tests.js | 32 |
2 files changed, 37 insertions, 0 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 eef858ddcfa..16970b2c21b 100644 --- a/addons/web/static/src/js/views/basic/basic_model.js +++ b/addons/web/static/src/js/views/basic/basic_model.js @@ -1645,6 +1645,11 @@ var BasicModel = AbstractModel.extend({ }); if (!hasChanged) { return $.when(); + } else if (!domainModel) { + return $.when({ + model: domainModel, + nbRecords: 0, + }); } var def = $.Deferred(); diff --git a/addons/web/static/tests/views/form_tests.js b/addons/web/static/tests/views/form_tests.js index 132777a8c08..c3cdbdc62d0 100644 --- a/addons/web/static/tests/views/form_tests.js +++ b/addons/web/static/tests/views/form_tests.js @@ -4820,5 +4820,37 @@ QUnit.module('Views', { form.destroy(); }); + QUnit.test('render domain field widget without model', function (assert) { + assert.expect(3); + + this.data.partner.fields.model_name = { string: "Model name", type: "char" }; + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '<form string="Partners">' + + '<group>' + + '<field name="model_name"/>' + + '<field name="display_name" widget="domain" options="{\'model\': \'model_name\'}"/>' + + '</group>' + + '</form>', + mockRPC: function (route, args) { + if (args.method === 'search_count') { + assert.strictEqual(args.model, 'test', + "should search_count on test"); + } + return this._super.apply(this, arguments); + }, + }); + + assert.strictEqual(form.$('.o_field_widget[name="display_name"]').text(), "Select a model to add a filter.", + "should contain an error message saying the model is missing"); + form.$('input[name="model_name"]').val("test").trigger("input"); + assert.notStrictEqual(form.$('.o_field_widget[name="display_name"]').text(), "Select a model to add a filter.", + "should not contain an error message anymore"); + form.destroy(); + }); + }); }); |
