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):