diff --git a/addons/http_routing/models/ir_http.py b/addons/http_routing/models/ir_http.py index 5469310228f..c0fd4a46a19 100644 --- a/addons/http_routing/models/ir_http.py +++ b/addons/http_routing/models/ir_http.py @@ -411,7 +411,7 @@ class IrHttp(models.AbstractModel): lang = preferred_lang or cls._get_default_lang() request.lang = lang - context['lang'] = lang.code + context['lang'] = lang._get_cached('code') # bind modified context request.context = context diff --git a/addons/website/tests/test_performance.py b/addons/website/tests/test_performance.py index 0cbc7ce214d..2e02135116a 100644 --- a/addons/website/tests/test_performance.py +++ b/addons/website/tests/test_performance.py @@ -95,7 +95,7 @@ class TestWebsitePerformance(UtilPerf): def test_30_perf_sql_queries_page_no_layout(self): # website.page with no call to layout templates self.page.arch = '
I am a blank page
' - self.assertEqual(self._get_url_hot_query(self.page.url), 10) + self.assertEqual(self._get_url_hot_query(self.page.url), 9) def test_40_perf_sql_queries_page_multi_level_menu(self): # menu structure should not impact SQL requests diff --git a/odoo/addons/base/models/res_lang.py b/odoo/addons/base/models/res_lang.py index 0b58daf5411..dcf901e1a22 100644 --- a/odoo/addons/base/models/res_lang.py +++ b/odoo/addons/base/models/res_lang.py @@ -213,6 +213,19 @@ class Lang(models.Model): langs = self.with_context(active_test=False).search([]) return sorted([(lang.code, lang.url_code, lang.name) for lang in langs], key=itemgetter(2)) + @tools.ormcache('self.id') + def _get_cached_values(self): + self.ensure_one() + return { + 'id': self.id, + 'code': self.code, + 'url_code': self.url_code, + 'name': self.name, + } + + def _get_cached(self, field): + return self._get_cached_values()[field] + @api.model @tools.ormcache('code') def _lang_code_to_urlcode(self, code):