[FIX] website: fix upadting menu names when many langs are active

Postgfresql functions can only take a max of 100 arguments by default,
when using 'jsonb_build_object' to update translations in jsonb menus
each lang adds 2 args as key value pairs. The languages should be added
in batches of 50.

closes odoo/odoo#123562

X-original-commit: 7dfbbcf91baf796174b171e46c182b8eeb2423a9
Signed-off-by: Wang Chong (cwg) <cwg@odoo.com>
This commit is contained in:
Jinane Maksoud
2023-06-02 23:39:22 +02:00
parent 34dc70ae5a
commit 7426b89398
+3 -1
View File
@@ -9,6 +9,7 @@ from odoo import api, fields, models
from odoo.addons.base.models.ir_model import MODULE_UNINSTALL_FLAG
from odoo.exceptions import MissingError
from odoo.http import request
from odoo.tools import split_every
_logger = logging.getLogger(__name__)
@@ -532,7 +533,8 @@ class IrModuleModule(models.Model):
return res
o_menu_name = [f"'{lang}', o_menu.name->>'{lang}'" for lang in langs if lang != 'en_US']
o_menu_name = 'jsonb_build_object(' + ', '.join(o_menu_name) + ')'
o_menu_name = ['jsonb_build_object(' + ', '.join(items) + ')' for items in split_every(50, o_menu_name)]
o_menu_name = ' || '.join(o_menu_name)
self.env.cr.execute(f"""
UPDATE website_menu menu
SET name = {'menu.name || ' + o_menu_name if overwrite else o_menu_name + ' || menu.name'}