1. Odoo报表追踪字段技术解析
在Odoo ERP系统中,报表追踪功能是企业级应用的核心需求之一。当我们需要在自定义报表中展示字段变更历史时,就需要深入理解mail.thread模块的追踪机制。这个功能特别适用于需要审计追踪的场景,比如财务单据变更记录、库存调整历史等业务环节。
1.1 追踪字段的核心数据结构
Odoo的字段追踪系统基于三个关键模型构建:
- mail.thread :抽象模型,为任何继承它的模型添加消息追踪能力
- mail.message :存储所有消息记录,包括字段变更
- mail.tracking.value :专门记录字段新旧值的变化
这三个模型的关联关系构成了完整的字段追踪链条。当我们在模型类中继承mail.thread并设置tracking=True的字段时,系统会自动记录这些字段的每次变更。
1.2 追踪字段的存储机制
追踪值实际存储在mail.tracking.value模型中,这个设计有几个精妙之处:
- 新旧值分开存储,便于比对
- 支持多种数据类型(整型、浮点、字符、文本等)
- 保留变更时间和操作用户信息
- 与具体业务模型解耦,通过mail_message_id关联
这种设计既保证了追踪数据的完整性,又不会过度污染业务数据表。
2. 报表中获取追踪字段的实战方法
2.1 基础查询方法
在报表中获取追踪字段的标准做法是通过ORM链式查询:
record = self.env['your.model'].search([('name','=','specific_record')])
tracking_values = record.message_ids.tracking_value_ids
这个查询会返回所有追踪值记录,但通常我们需要进一步处理这些数据。
2.2 关键字段映射技巧
实际报表开发中,我们通常需要以下四类信息:
-
字段变更内容 :
new_values = tracking_values.mapped('new_value_char') # 新值 old_values = tracking_values.mapped('old_value_char') # 旧值 -
变更人信息 :
authors = record.message_ids.mapped('author_id.name') # 变更人姓名 -
变更时间 :
change_dates = record.message_ids.mapped('date') # 变更时间 -


119

被折叠的 条评论
为什么被折叠?



