From c432667fbf2f9b833d7fde9010f558d19666ad2f Mon Sep 17 00:00:00 2001 From: "Lucas Perais (lpe)" Date: Wed, 28 Nov 2018 15:26:48 +0000 Subject: [PATCH] [FIX] base,web_editor: get_view_id should return singleton Because of 9a98a4d60e36ea7d9f29ea52a1524501ebff84de and since the key of an ir.ui.view cannot be unique (multiwebsite), duplicating views made several parts of Odoo crash After this commit, we limit to one the views that are searched with their key Responsibility is given to the user to change the priority and/or the key in order to predict which view will be taken OPW 1913335,1913100,1913186,1913112,1913240 closes odoo/odoo#29105 --- addons/web_editor/models/ir_ui_view.py | 2 +- odoo/addons/base/models/ir_ui_view.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/web_editor/models/ir_ui_view.py b/addons/web_editor/models/ir_ui_view.py index 532e3de70d9..45211502f11 100644 --- a/addons/web_editor/models/ir_ui_view.py +++ b/addons/web_editor/models/ir_ui_view.py @@ -202,7 +202,7 @@ class IrUiView(models.Model): @api.model def _view_obj(self, view_id): if isinstance(view_id, pycompat.string_types): - return self.search([('key', '=', view_id)]) or self.env.ref(view_id) + return self.search([('key', '=', view_id)], limit=1) or self.env.ref(view_id) elif isinstance(view_id, pycompat.integer_types): return self.browse(view_id) # assume it's already a view object (WTF?) diff --git a/odoo/addons/base/models/ir_ui_view.py b/odoo/addons/base/models/ir_ui_view.py index 2c49ee065b8..c46b9ba87d2 100644 --- a/odoo/addons/base/models/ir_ui_view.py +++ b/odoo/addons/base/models/ir_ui_view.py @@ -1179,7 +1179,7 @@ actual arch. return template if '.' not in template: raise ValueError('Invalid template id: %r' % template) - view = self.search([('key', '=', template)]) + view = self.search([('key', '=', template)], limit=1) return view and view.id or self.env['ir.model.data'].xmlid_to_res_id(template, raise_if_not_found=True) def clear_cache(self):