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

news/2025/11/25 14:30:23/文章来源:https://www.cnblogs.com/qianxunman/p/19268371

明白,你现在使用的是 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://www.mzph.cn/news/976057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对于高增量数据库的解决方案记录(暂时修改)

对于高增量数据库的解决方案记录(暂时修改)ALTER TABLE t_paper_question MODIFY paper_id varchar(32) NOT NULL COMMENT 试卷; -- 先删除原主键 ALTER TABLE t_paper_question DROP PRIMARY KEY; -- 添加新复合主键…

2025年北京阅卷考试软件公司权威推荐榜单:自动阅卷软件/网上阅卷的软件/答题卡扫描源头公司精选

数据显示,2025年中国在线教育市场规模预计突破6000亿元,其中超过90%的高校已部署或正在升级在线考试系统。在这一背景下,北京阅卷考试软件公司凭借其创新的技术和服务,正推动着教育评价体系的智能化变革。 本文将基…

2025年11月五大GEO优化公司:技术融合驱动增长新生态

随着AI大模型与全域搜索技术深度融合,GEO(全域搜索优化)已成为企业突破流量边界、实现精准增长的核心抓手。数据显示,2025年GEO优化驱动的全域营销转化效率较传统搜索模式提升4.0倍,核心场景首屏覆盖率平均提升70…

《基于IPD流程的研发项目管理》公开课(2025年12月12-13日)

《基于IPD流程的研发项目管理》公开课(2025年12月12-13日)【课程背景】 随着国内产品创新环境的逐渐形成,许多企业管理者创新意识逐步提升,产品研发项目管理的规范性被提上日程,研发的效率和质量、成本等因素引起…

HarmonyOS应用性能调优与内存管理实战 - 指南

HarmonyOS应用性能调优与内存管理实战 - 指南2025-11-25 14:22 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

CF1450C2 Errich-Tac-Toe (Hard Version)

考虑刻画不合法条件。 给网格染色 \(col_{(x,y)}=(x+y)\mod 3\),则连续三个同色棋子

使用 Privoxy 将 socks5 转为 http/https

使用 Privoxy 将 socks5 转为 http/https安装 Privoxysudo apt install privoxy -y配置 Privoxy编辑配置文件 /etc/privoxy/config,添加以下内容(将 127.0.0.1:1080 替换为 ss 的地址和端口): forward-socks5 / 12…

迅为如何在RK3576开发板上部署YOLOv5;基于RK3576构建智能门禁系统

迅为如何在RK3576开发板上部署YOLOv5;基于RK3576构建智能门禁系统迅为如何在RK3576开发板上部署YOLOv5;基于RK3576构建智能门禁系统在边缘计算浪潮澎湃的今天,一颗强大、全能的核心处理器是构建高端AIoT项目的基石。…

国际象棋

#include <bits/stdc++.h> using namespace std; int tx,ty; int visited[10][10]; struct node {int x,y,s; }; int dx[8]={-1,-2,1,2,1,2,-1,-2};// int dy[8]={2,1,2,1,-2,-1,-2,-1};// int bfs(int sx,int s…

2025苏州留学机构十强排名榜

2025苏州留学机构十强排名榜一、苏州留学机构怎么选?这五个问题帮你理清思路作为一位在留学咨询领域深耕超过12年的国际教育规划师,我每天都会接触到大量苏州学生和家长的咨询。2025年10月24日,当我整理最新行业数据…

背包的第 $k$ 优解

背包的第 \(k\) 优解 Bone Collector II 简化题意 同标题,求背包的第 \(k\) 优解。废话 思路 正常背包记录的就是最大值,转移用的也是最大值,但现在我们需要的是第 \(k\) 优解,那么我们就记录全部的由前 \(k\) 种最…

2025深圳香港留学中介机构有哪些

2025深圳香港留学中介机构有哪些一、深圳香港留学中介怎么选?这些疑问你有吗?2025年,深圳和香港的留学市场依然活跃,许多学生和家长在挑选中介时常常感到迷茫。作为一名拥有12年经验的国际教育全案规划师,我经常被…

MySQL权限管理的坑你踩了没有?

MySQL权限管理的坑你踩了没有?2025-11-25 14:15 潇湘隐者 阅读(0) 评论(0) 收藏 举报假设有这么一个需求,开发人员要求你创建一个账号test,要求这个账号有创建表,查询,更新,删除表的权限, 如下例子所示 mysql>…

2025厦门十大正规留学机构排名榜

2025厦门十大正规留学机构排名榜一、厦门学生如何挑选靠谱留学中介?五大常见问题解析作为从事国际教育规划工作超过12年的专业人士,我经常遇到厦门学生和家长咨询留学机构选择问题。2025年10月25日最新搜索数据显示,…

后缀树模板

给定模式串 \(s\),\(q\) 次询问,求 \(t\) 在 \(s\) 中出现次数。 其中每个字符以正整数编码,强制在线。 后缀树 板子。没写过考场摸出来了,记录下代码。\(O(n\log n)\)。 #include<bits/stdc++.h> #include&…

2025 年 11 月冷却塔厂家权威推荐榜:闭式冷却塔、方形冷却塔、工业冷却塔、全钢冷却塔、凉水塔、圆形冷却塔、玻璃钢冷却塔、防腐冷却塔、冷却水塔,高效散热与持久耐用的专业之选

2025 年 11 月冷却塔厂家权威推荐榜:闭式冷却塔、方形冷却塔、工业冷却塔、全钢冷却塔、凉水塔、圆形冷却塔、玻璃钢冷却塔、防腐冷却塔、冷却水塔,高效散热与持久耐用的专业之选 在工业生产与商业设施运行中,热交换…

好用的库存管理系统盘点:橙子库存通——简洁实用、功能齐全,出入库管理更省心

在企业的日常运营中,库存管理常常扮演着一个“幕后功臣”的角色。它井然有序时,无人察觉;可一旦出现问题——比如找不到货、库存不准导致超卖、临期产品未及时发现——就足以让整个团队手忙脚乱,甚至造成直接的经济…

2025广州最大的留学中介机构

2025广州最大的留学中介机构作为一名拥有十年经验的国际教育全案规划师,我经常深入广州的留学服务市场进行调研。今天是2025年10月24日,随着留学政策逐年变化,许多家庭在挑选中介时感到迷茫。广州作为华南留学重镇,…

库存管理系统哪家强?橙子库存通:专业稳定,安全可靠,110万企业的共同选择

"仓库库存管理系统哪家强?"——这个在搜索引擎上被无数次问及的问题,背后是无数企业主、仓库管理员在数字化转型升级过程中的迷茫与焦虑。面对市场上琳琅满目的解决方案,从功能繁重的传统ERP到轻量化的Sa…

2025北京留学中介哪些机构好一点

2025北京留学中介哪些机构好一点一、北京留学中介怎么选?这些高频问题帮你理清思路作为从事国际教育规划工作超过12年的专业人士,我每天都会接触到大量北京地区的学生和家长咨询留学中介选择问题。在2025年10月25日的…