[FIX] website: perf - ormcache the website menus
To avoid a SQL Query on hot state, the website menus ids are now prefetch. Related to #47257 task-2211013 X-original-commit: 73421c27f01e7100403eaa72e027c34dbdf9f720
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user