Odoo v10导入库存盘点报AttributeError: 'bool'对象无id属性求助
问题描述
在Odoo v10系统中执行库存盘点数据导入操作时触发程序报错,具体报错信息为AttributeError: 'bool' object has no attribute 'id',报错界面如下:
触发原因
该报错本质是代码尝试读取布尔类型值的id属性,Odoo中布尔值仅为True/False,不存在对象属性,结合库存盘点导入场景,具体触发逻辑如下:
- 核心触发逻辑:导入流程需要匹配产品、库位、批次、盘点负责人等关联数据库记录,当自定义匹配逻辑未找到对应记录时,直接返回了布尔值
False而非空记录集,后续代码未做有效性校验直接读取.id属性就会抛出该错误。 - 高频触发场景:
- 导入文件内关联字段值(如产品编码、库位编码)存在拼写错误、前后多余空格、大小写不匹配,导致匹配逻辑找不到对应记录
- 导入字段映射配置错误,将非关联类字段(如备注、盘点数量)映射到了关联字段列,匹配逻辑拿到无效值返回False
- 导入文件中必填关联字段留空,未补全对应值
- 第三方自定义模块重写了库存盘点导入的核心匹配逻辑,遗漏了匹配失败场景的分支判断,没有抛出明确提示直接返回False
修复方案
按优先级从高到低排查处理:
- 校验导入源文件
逐行核对所有关联字段取值,确认和系统内已有记录完全一致,清除字段值前后的多余空格,补全所有必填关联字段的取值,删除格式异常的行。 - 校验导入字段映射
重新进入导入流程,在字段映射确认页逐列核对映射关系,确保每一列的目标字段和文件内容匹配,没有错配字段类型。
可先手动创建一条测试盘点单,用系统导出功能生成标准导入模板,将待导入数据按模板格式填充后再导入,能规避90%以上的格式、映射类问题。 - 排查自定义代码问题
打开开发者模式,从报错弹窗的调试信息中拉取完整错误栈,定位到抛出错误的具体代码行:- 如果报错位置属于第三方自定义模块,补充匹配结果校验逻辑,禁止直接对未校验的返回值读取
.id属性,参考修复代码:
# 问题代码示例(匹配失败直接返回False,后续取id触发报错) def get_location(self, location_name): res = self.env['stock.location'].search([('name', '=', location_name)], limit=1) return res if res else False # 修复后逻辑 def get_location(self, location_name): res = self.env['stock.location'].search([('name', '=', location_name)], limit=1) if not res: # 匹配失败直接抛出明确的用户提示,中断流程 raise UserError('导入失败,未找到对应库位:%s,请核对数据后重试' % location_name) return res - 如果报错位置属于第三方自定义模块,补充匹配结果校验逻辑,禁止直接对未校验的返回值读取
内容的提问来源于stack exchange,提问作者Ayudita Salsabila
相关产品推荐
相关产品推荐

