当前位置: 首页 > news >正文

odoo12 跟踪所有的模型调用的onchange 方法

明白,你现在使用的是 Odoo 12,它的 onchange 机制确实和 Odoo 13+ 完全不同。

你贴出的 Odoo 12 的源码:

def _onchange_eval(self, field_name, onchange, result):...

在 Odoo 12 中,onchange 方法的核心逻辑集中在这里,而 这一段代码就是所有 onchange 执行的总入口

下面我教你 如何在 Odoo 12 中跟踪所有 onchange 调用 + 如何用 PyCharm debug 精准断点


✅ 一、Odoo 12 中跟踪所有 onchange 的最佳断点位置

Odoo 12 的 onchange 调用链:

views → JS → onchange → ORM → _onchange_eval → method(self)

你贴的 _onchange_eval所有 onchange 执行的最核心入口
要跟踪所有 onchange,只需要在这个方法里加断点或日志即可。


🔥 在此方法一行加入日志(最清晰)

修改为:

def _onchange_eval(self, field_name, onchange, result):_logger.info("[ONCHANGE DEBUG] model=%s field=%s onchange=%s",self._name, field_name, onchange)

放在函数开头即可。

你会看到日志类似:

[ONCHANGE DEBUG] model=sale.order field=partner_id onchange=1
[ONCHANGE DEBUG] model=sale.order field=order_line onchange=product_id_change
[ONCHANGE DEBUG] model=stock.move field=product_id onchange=onchange_product_id

🔥 PyCharm 中的断点位置(精准)

以下是 Odoo 12 的完整代码片段,我们直接标记你应当打断点的位置:

def _onchange_eval(self, field_name, onchange, result):_logger.info(">>> ONCHANGE TRIGGERED: model=%s field=%s onchange=%s",self._name, field_name, onchange)   # ← ← 打断点或日志onchange = onchange.strip()def process(res):...

只要你在这里下断点,所有 onchange 都会被捕获,包括:

  • @api.onchange
  • views 中的 onchange="foo(bar)"
  • widget 默认 onchange
  • one2many 的 onchange chain
  • many2one 引发的 cascaded onchange

🔧 二、如何查看每个 onchange 具体调用了哪个方法?

Odoo 12 的 onchange 方法来自:

self._onchange_methods[field_name]

所以你在断点时可以看到:

表达式 内容
field_name 当前触发的字段
onchange XML 中配置的 onchange 字符串
self._onchange_methods[field_name] 所有绑定的 Python onchange

例如:

self._onchange_methods["partner_id"]

会返回:

[<function SaleOrder.partner_id_change>,<function SaleOrder.onchange_partner_id_warning>,
]

🔥 三、PyCharm Debug 配置(关键步骤)

  1. 在 PyCharm 中创建 Python 配置:
Script path: odoo-bin
Parameters: --config=odoo.conf --dev=all
  1. 加上项目路径:
Working directory: Odoo 根目录
  1. 设置断点:
odoo/models.py   或者   odoo/models.py(Odoo12)

方法名:

_onchange_eval

启动 Debug → 网页 UI 上修改任何字段 → PyCharm 就会断下来。


🎯 如果你想跟踪某个具体模型的 onchange(建议)

在你自己的模型中写:

def _onchange_eval(self, field_name, onchange, result):if self._name == "sale.order":print(">>> SALE ORDER onchange:", field_name, onchange)return super()._onchange_eval(field_name, onchange, result)

☑ 只打印 sale.order
☑ 不影响其他模型
☑ 更适合大型项目执行效率更高


📌 四、总结(Odoo 12 专用)

需求 方法
跟踪所有 onchange _onchange_eval() 开头打断点/日志
查看执行链 self._onchange_methods[field_name]
PyCharm debug _onchange_eval 中断点即可
只跟踪特定模型 override _onchange_eval 并条件过滤

Odoo 12 的 onchange 机制比 13+ 简单,因此跟踪非常容易。

http://icebutterfly214.com/news/65355/

相关文章:

  • 背包的第 $k$ 优解
  • MySQL权限管理的坑你踩了没有?
  • 2025 年 11 月冷却塔厂家权威推荐榜:闭式冷却塔、方形冷却塔、工业冷却塔、全钢冷却塔、凉水塔、圆形冷却塔、玻璃钢冷却塔、防腐冷却塔、冷却水塔,高效散热与持久耐用的专业之选
  • k8s chain
  • Spring Data JPA 最佳实践【1/2】:实体设计指南
  • 2025年11月审计报告事务所推荐榜单:综合实力与专业服务对比分析
  • 2025年家具封边条源头厂家权威推荐榜单:板材封边条/门窗封边条/柜门封边条源头厂家精选
  • 2025 年 11 月铝单板厂家实力推荐榜:氟碳铝单板、仿木纹铝单板、仿石材铝单板,匠心工艺与卓越耐候性的建筑外装优选
  • 2025年比较好的免浆虾仁厂家最新用户好评榜
  • 2025年知名的高端工装定制最新TOP厂家排名
  • 2025年口碑好的ENF级除醛生态板厂家推荐及采购参考
  • 天机学堂day03学习 - 指南
  • 2025年口碑好的微启式安全阀高评价厂家推荐榜
  • 2025年知名的上海减压器厂家最新实力排行
  • 2025年质量好的吨袋包装机用户好评厂家排行
  • 2025年评价高的智慧空压站厂家最新权威实力榜
  • 2025年口碑好的长途搬家公司年度服务力榜
  • 2025年诚信的吊装搬运公司可靠品牌榜
  • 2025年知名的AAA纸箱厂家最新TOP实力排行
  • [nanoGPT] 性能与效率 | `torch.compile()` |`Flash Attention`|`混合精度训练`|`estimate_mfu` - 指南
  • 2025年建房专用胶合建筑模板品牌厂家排行榜
  • 2025年评价高的油雾空气过滤器厂家最新权威推荐排行榜
  • 可靠的医疗器械可沥滤物测试公司如何选择:官方资质与技术深度的权威评测
  • 广东深圳一家名叫凯粤的档案管理公司实力不俗
  • 全肤质友好:2025去屑止痒控油洗发水精选,轻松攻克油屑痒难题
  • vxe-table 选择多个单元格区域复制粘贴的详细用法
  • 2025年11月审计事务所推荐榜单:精选五家权威机构综合对比分析
  • 2025年家用电梯厂家实力观察:别墅电梯、家用电梯四家企业以技术与服务获认可
  • 哪家做生物学评价比较好:多家高成功率机构的服务全解析
  • 赋能智能未来—2026中国激光雷达大会暨展览会|6.26-28|激光雷达展会时间