From 7426b89398f7faa55bde13eb7fb2a98eeed22a7f Mon Sep 17 00:00:00 2001 From: Jinane Maksoud Date: Mon, 22 May 2023 15:46:37 +0000 Subject: [PATCH] [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) --- addons/website/models/ir_module_module.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/website/models/ir_module_module.py b/addons/website/models/ir_module_module.py index ee83aefcfd2..5d2f89a23e5 100644 --- a/addons/website/models/ir_module_module.py +++ b/addons/website/models/ir_module_module.py @@ -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'}