diff --git a/addons/website/models/website.py b/addons/website/models/website.py index 270a6199c95..610f198d4d6 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -134,7 +134,7 @@ class Website(models.Model): def _compute_menu(self): for website in self: - menus = self.env['website.menu'].search([('website_id', '=', website.id)]) + menus = self.env['website.menu'].browse(website._get_menu_ids()) # use field parent_id (1 query) to determine field child_id (2 queries by level)" for menu in menus: @@ -146,6 +146,11 @@ class Website(models.Model): website.menu_id = menus and menus.filtered(lambda m: not m.parent_id)[0].id or False + # self.env.uid for ir.rule groups on menu + @tools.ormcache('self.env.uid', 'self.id') + def _get_menu_ids(self): + return self.env['website.menu'].search([('website_id', '=', self.id)]).ids + @api.model def create(self, vals): self._handle_favicon(vals) diff --git a/addons/website/models/website_menu.py b/addons/website/models/website_menu.py index bed9fb8cf26..88e48ca82e0 100644 --- a/addons/website/models/website_menu.py +++ b/addons/website/models/website_menu.py @@ -68,6 +68,7 @@ class Menu(models.Model): Be careful to return correct record for ir.model.data xml_id in case of default main menus creation. ''' + self.clear_caches() # Only used when creating website_data.xml default menu if vals.get('url') == '/default-main-menu': return super(Menu, self).create(vals) @@ -91,7 +92,14 @@ class Menu(models.Model): res = super(Menu, self).create(vals) return res # Only one record is returned but multiple could have been created + def write(self, values): + res = super().write(values) + if 'website_id' in values: + self.clear_caches() + return res + def unlink(self): + self.clear_caches() default_menu = self.env.ref('website.main_menu', raise_if_not_found=False) menus_to_remove = self for menu in self.filtered(lambda m: default_menu and m.parent_id.id == default_menu.id):