如何实现Odoo中子任务的可追踪性?
解决Odoo子任务无追踪性的方法
核心原理
Odoo的记录追踪功能依赖三个关键要素:
- 模型继承
mail.thread混合模型(project.task本身已继承,但需确保未被自定义代码覆写) - 字段定义中设置
track_visibility属性('onchange'仅追踪字段变更,'always'始终追踪字段状态) - 表单视图中添加追踪面板组件(展示变更记录、消息及关注者)
方法1:统一字段追踪设置
如果子任务的字段未触发追踪,可能是字段的track_visibility被条件限制或未全局生效。通过自定义模块继承project.task,确保需要追踪的字段对所有任务(含子任务)生效:
from odoo import models, fields class ProjectTask(models.Model): _inherit = 'project.task' # 确保任务标题的追踪对所有任务生效 name = fields.Char(track_visibility='onchange') # 对其他核心字段重复设置,比如任务阶段、负责人 stage_id = fields.Many2one(track_visibility='onchange') user_id = fields.Many2one(track_visibility='onchange')
方法2:给子任务视图添加追踪面板
默认主任务的表单视图包含追踪面板,但子任务的视图可能被隐藏或未配置。在自定义模块中继承子任务的表单视图,添加追踪组件:
<odoo> <record id="view_task_sub_form_inherit" model="ir.ui.view"> <field name="name">project.task.sub.form.inherit</field> <field name="model">project.task</field> <field name="inherit_id" ref="project.view_task_form2"/> <field name="arch" type="xml"> <!-- 在表单末尾添加追踪面板 --> <xpath expr="//sheet" position="after"> <div class="oe_chatter"> <field name="message_follower_ids" widget="mail_followers"/> <field name="message_ids" widget="mail_thread"/> </div> </xpath> </field> </record> </odoo>
方法3:移除追踪逻辑的条件限制
检查是否有自定义代码或第三方模块对mail.thread的追踪逻辑添加了条件(比如仅允许主任务触发追踪)。若存在如下限制代码,需移除条件:
# 原限制代码 def message_post(self, **kwargs): if not self.parent_id: return super(ProjectTask, self).message_post(**kwargs) # 修改后 def message_post(self, **kwargs): return super(ProjectTask, self).message_post(**kwargs)
验证配置
完成修改后,升级自定义模块并验证:
- 进入Odoo应用列表,找到自定义模块点击「升级」
- 创建或打开一个子任务,修改标题、阶段等字段,检查追踪面板是否生成变更记录
- 验证子任务的消息发送、关注者添加功能是否正常
内容的提问来源于stack exchange,提问作者Rahma Begag
相关产品推荐
相关产品推荐

