From 092870270eb059bc848f82684a4d1d4b84758e30 Mon Sep 17 00:00:00 2001 From: Jeremy Kersten <jke@odoo.com> Date: Tue, 18 Sep 2018 16:11:45 +0200 Subject: [PATCH] [FIX] website: allow to get current website without fallback Before this commit, when we ask for get_current_website, we always get one website. If we don't know which, we took the first one. Now we can ask, if we are into a website context or not with a new argument fallback. Previous code like: website = get_current_website() if website: ... Have now a sense ;) --- addons/website/models/ir_attachment.py | 2 +- addons/website/models/ir_ui_view.py | 7 +++++++ addons/website/models/website.py | 8 +++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/addons/website/models/ir_attachment.py b/addons/website/models/ir_attachment.py index 15fe50f54717..02a678ad9ec7 100644 --- a/addons/website/models/ir_attachment.py +++ b/addons/website/models/ir_attachment.py @@ -17,7 +17,7 @@ class Attachment(models.Model): @api.model def create(self, vals): - website = self.env['website'].get_current_website() + website = self.env['website'].get_current_website(fallback=False) if website and 'website_id' not in vals and 'not_force_website_id' not in self.env.context: vals['website_id'] = website.id return super(Attachment, self).create(vals) diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py index 6a8856f269a6..d822f3e0e10c 100644 --- a/addons/website/models/ir_ui_view.py +++ b/addons/website/models/ir_ui_view.py @@ -30,6 +30,13 @@ class View(models.Model): for view in self: view.first_page_id = self.env['website.page'].search([('view_id', '=', view.id)], limit=1) + @api.model + def create(self, vals): + website = self.env['website'].get_current_website(fallback=False) + if website and 'website_id' not in vals and 'not_force_website_id' not in self.env.context: + vals['website_id'] = website.id + return super(View, self).create(vals) + @api.multi def write(self, vals): '''COW for ir.ui.view. This way editing websites does not impact other diff --git a/addons/website/models/website.py b/addons/website/models/website.py index fc6ff771e1c7..06756a444cbd 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -435,7 +435,7 @@ class Website(models.Model): # ---------------------------------------------------------- @api.model - def get_current_website(self): + def get_current_website(self, fallback=True): if request and request.session.get('force_website_id'): return self.browse(request.session['force_website_id']) @@ -446,15 +446,17 @@ class Website(models.Model): if country: country_id = request.env['res.country'].search([('code', '=', country)], limit=1).id - website_id = self._get_current_website_id(domain_name, country_id) + website_id = self._get_current_website_id(domain_name, country_id, fallback=fallback) return self.browse(website_id) @tools.cache('domain_name', 'country_id') - def _get_current_website_id(self, domain_name, country_id): + def _get_current_website_id(self, domain_name, country_id, fallback=True): # sort on country_group_ids so that we fall back on a generic website (empty country_group_ids) websites = self.search([('domain', '=', domain_name)]).sorted('country_group_ids') if not websites: + if not fallback: + return False return self.search([], limit=1).id elif len(websites) == 1: return websites.id -- GitLab