You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Python递归方法实现从多级字典创建Odoo记录

解决方案

你定位的问题原因正确:return parameter_list 放在了循环体内部,处理完第一个参数后就直接终止了遍历,导致后续参数丢失。只需调整return语句的位置,同时兼容递归返回逻辑即可。

修正后代码

def _prepare_parameter_list(self, parameter_dict, recursive_data=False):
    building_data = recursive_data if recursive_data else {}
    parameter_list = []
    for key, value in parameter_dict.items():
        if key != 'optional' and key != 'type':
            # 构造参数基础信息
            parameter_name_dict = {
                'name': key,
                'description': ' '.join(word.capitalize() for word in camel_case_split(key)),
            }
            # 递归获取参数属性/子参数
            characterization_dict = self._prepare_parameter_list(value)
            built_parameter_dict = {**parameter_name_dict, **characterization_dict}
            parameter_list.append((0, 0, built_parameter_dict))
        else:
            # 处理参数元数据
            if key == 'optional':
                building_data['optional'] = value
            if key == 'type':
                if isinstance(value, dict):
                    # 嵌套类型递归生成子参数列表
                    building_data['parameter_ids'] = self._prepare_parameter_list(value)
                else:
                    # 基础类型提取类型名称
                    building_data['type'] = value.split('(')[0]
    # 所有键遍历完成后再返回:有参数列表返回列表,否则返回参数属性
    return parameter_list if parameter_list else building_data

调整说明

  • 把原循环内部的return parameter_list移动到循环结束位置,确保所有同级参数都被完整遍历处理
  • 增加返回值判断逻辑,兼容两类返回场景:父节点层级返回Odoo One2many格式的参数列表,叶子参数节点返回属性字典

内容的提问来源于stack exchange,提问作者Simon Capriles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 13:24:09