如何修改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
相关产品推荐
相关产品推荐

