Odoo模块本地启动失败:KeyError: '#id' 问题求助
解决Odoo模块启动KeyError: '#id'问题
错误根源分析
从报错堆栈可以明确,问题出在模块的CSV数据文件加载环节:Odoo在解析CSV数据时,尝试处理#id字段,但目标模型中不存在该字段,导致抛出KeyError。#id是Odoo用于定义外部标识符的特殊语法,不能作为普通模型字段使用,常见原因是CSV文件格式不符合Odoo数据导入规范。
具体解决步骤
- 检查CSV文件表头:
- 确认是否错误将
#id作为普通字段名,#id仅用于指定数据的外部ID,需放在CSV第一列,格式为模块名.自定义ID(例如my_module.demo_partner),不能作为模型的常规字段。 - 如果是关联其他记录(如Many2one字段),需使用
字段名/id的格式引用外部ID,而非直接写#id。
- 确认是否错误将
- 验证字段映射正确性:
- 核对CSV中所有字段名与目标模型的实际字段完全一致,排除拼写错误或使用不存在的字段。
- 检查CSV语法规范:
- 确保CSV无语法错误,比如引号配对、逗号分隔正确,特殊字符内容需用双引号包裹。
- 清理文件中的空行或无效数据行。
- 排查模块依赖与加载顺序:
- 确认模块依赖的其他模块已正确安装,避免因关联的外部ID未被创建导致加载失败。
- 定位问题CSV文件:
- 临时注释
__manifest__.py中data列表内的CSV文件,重启模块。若能正常启动,说明问题出在被注释的CSV中,再针对性排查。
- 临时注释
原始报错信息
Odoo Server Error Traceback (most recent call last): File "E:\AppOdoo\odoo\http.py", line 1722, in _serve_db return service_model.retrying(self._serve_ir_http, self.env) File "E:\AppOdoo\odoo\service\model.py", line 133, in retrying result = func() File "E:\AppOdoo\odoo\http.py", line 1749, in _serve_ir_http response = self.dispatcher.dispatch(rule.endpoint, args) File "E:\AppOdoo\odoo\http.py", line 1953, in dispatch result = self.request.registry['ir.http']._dispatch(endpoint) File "E:\AppOdoo\odoo\addons\base\models\ir_http.py", line 222, in _dispatch result = endpoint(**request.params) File "E:\AppOdoo\odoo\http.py", line 722, in route_wrapper result = endpoint(self, *args, **params_ok) File "e:\appodoo\addons\web\controllers\dataset.py", line 28, in call_button action = self._call_kw(model, method, args, kwargs) File "e:\appodoo\addons\web\controllers\dataset.py", line 20, in _call_kw return call_kw(request.env[model], method, args, kwargs) File "E:\AppOdoo\odoo\api.py", line 468, in call_kw result = _call_kw_multi(method, model, args, kwargs) File "E:\AppOdoo\odoo\api.py", line 453, in _call_kw_multi result = method(recs, *args, **kwargs) File "<decorator-gen-77>", line 2, in button_immediate_install File "E:\AppOdoo\odoo\addons\base\models\ir_module.py", line 75, in check_and_log return method(self, *args, **kwargs) File "E:\AppOdoo\odoo\addons\base\models\ir_module.py", line 467, in button_immediate_install return self._button_immediate_function(self.env.registry[self._name].button_install) File "E:\AppOdoo\odoo\addons\base\models\ir_module.py", line 591, in _button_immediate_function registry = modules.registry.Registry.new(self._cr.dbname, update_module=True) File "<decorator-gen-16>", line 2, in new File "E:\AppOdoo\odoo\tools\func.py", line 87, in locked return func(inst, *args, **kwargs) File "E:\AppOdoo\odoo\modules\registry.py", line 113, in new odoo.modules.load_modules(registry, force_demo, status, update_module) File "E:\AppOdoo\odoo\modules\loading.py", line 480, in load_modules processed_modules += load_marked_modules(env, graph, File "E:\AppOdoo\odoo\modules\loading.py", line 364, in load_marked_modules loaded, processed = load_module_graph( File "E:\AppOdoo\odoo\modules\loading.py", line 227, in load_module_graph load_data(env, idref, mode, kind='data', package=package) File "E:\AppOdoo\odoo\modules\loading.py", line 71, in load_data tools.convert_file(env, package.name, filename, idref, mode, noupdate, kind) File "E:\AppOdoo\odoo\tools\convert.py", line 623, in convert_file convert_csv_import(env, module, pathname, fp.read(), idref, mode, noupdate) File "E:\AppOdoo\odoo\tools\convert.py", line 665, in convert_csv_import result = env[model].with_context(**context).load(fields, datas) File "E:\AppOdoo\odoo\models.py", line 1184, in load if isinstance(model_fields[field_path[0]], odoo.fields.Many2one): KeyError: '#id' The above server error caused the following client error: RPC_ERROR: Odoo Server Error RPCError@http://localhost:8069/web/assets/2df272c/web.assets_web.min.js:2871:319 makeErrorFromResponse@http://localhost:8069/web/assets/2df272c/web.assets_web.min.js:2874:163 jsonrpc/promise</<@http://localhost:8069/web/assets/2df272c/web.assets_web.min.js:2878:34
内容的提问来源于stack exchange,提问作者Hckael
相关产品推荐
相关产品推荐

