跳至内容

一文看懂 Odoo 19 工作流调试:避开旧版调试习惯陷阱

2026年10月27日 由
一文看懂 Odoo 19 工作流调试:避开旧版调试习惯陷阱
中国 Odoo, 苏州远鼎

调试 Odoo 19 会涉及 Python 模型、OWL、JSON-RPC 与记录规则。HTTP / OWL / 前端打包也有变化,部分旧习惯会失效。优先用可落地的检查手段。

1. 看 JSON-RPC 正文,别只看 HTTP 状态码

多数业务错误仍返回 HTTP 200,真正异常在 JSON-RPC 的 error 里:

{
  "jsonrpc": "2.0",
  "id": 1,
  "error": {
    "code": 200,
    "message": "Odoo Server Error",
    "data": {
      "name": "odoo.exceptions.ValidationError",
      "debug": "Traceback ...",
      "message": "The field 'email' is required."
    }
  }
}

HTTP 重构后已无 exception_type——请用 data.name。

客户端取值:response.error?.data?.name。

2. 服务端调试日志

配置文件 odoo.conf:

[options]
log_level = debug
log_handler = :DEBUG

启动命令:

python odoo-bin --log-level=debug --log-handler=:DEBUG -c odoo.conf

按模块定点输出日志,减少噪音:

--log-handler=odoo.addons.your_module:DEBUG

参考文件:odoo.conf.debug.sample

3. 方法内断点(仅开发环境使用)

def action_confirm(self):
    breakpoint()  # 或: import pdb; pdb.set_trace()
    return super().action_confirm()

⚠️ 切勿留在生产环境——进程会挂起且不一定有明确报错。

4. 拦截前端 RPC

按钮 / OWL 触发的流程常走 /web/dataset/call_kw。

操作:浏览器 DevTools → Network,过滤 XHR,查看请求/响应 JSON。

临时 RPC 包装脚本(上线提交前务必删除):static/src/rpc_debug_snippet.js。

5. 抛出正确的异常类

from odoo.exceptions import UserError, ValidationError, AccessError, MissingError

raise UserError("You can't confirm an order without a customer.")
raise ValidationError("The delivery date cannot be in the past.")
raise AccessError("You don't have rights to approve this record.")
raise MissingError("Record missing.")

建议:少用裸 ValueError / Exception——前端映射与调试信息较差。

示例代码:models/sale_order.py

6. 自动化可能“静默无果”

服务器动作 / 定时任务 / 字段自动化有独立事务。

  • 域名不匹配 → 0 行数据处理 → 不报错
  • 抛出真实异常 → 事务回滚、前端弹窗提示

无 SSH 时,直接查询 ir_logging 日志表:

SELECT name, level, message, create_date
FROM ir_logging
WHERE level IN ('ERROR', 'WARNING')
ORDER BY create_date DESC
LIMIT 50;
一文看懂 Odoo 19 工作流调试:避开旧版调试习惯陷阱
中国 Odoo, 苏州远鼎 2026年10月27日
标签
存档