You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在自定义模块中重写helpdesk.ticket模型的create方法

Odoo 多模块继承create方法逻辑控制方案

核心机制说明

Odoo 模型基于Python类实现多继承,方法调用严格遵循MRO(方法解析顺序)链:所有通过_inherit扩展同一模型的方法,只要执行super()调用,就会按模块加载顺序(受模块依赖关系控制)依次触发所有层级的同名方法,不存在默认的覆盖逻辑。之前第二个模块调用super后两个模块create逻辑均执行,是框架的正常表现,不是异常。

理想方案落地实现

你提到的「优先执行第二个模块判断逻辑、条件成立才触发原有自定义模块create附加逻辑」的需求完全可落地,根据是否能修改第一个自定义模块的代码,分两种实现方式,均不需要全量复制原有create代码。

方案1:可修改第一个自定义模块(推荐,无冗余、易维护)

不要把附加逻辑硬编码在create方法内,抽离可拦截的控制钩子,修改第一个模块的helpdesk.ticket代码:

# 第一个自定义模块内的helpdesk.ticket实现
@api.model
def create(self, vals):
    res = super(HelpdeskTicket, self).create(vals)
    # 增加钩子判断,默认执行原有逻辑
    if self._allow_run_create_extra(vals, res):
        res.do_something()
    return res

def _allow_run_create_extra(self, create_vals, created_record):
    """create后置逻辑执行开关,供后续继承模块扩展控制"""
    return True

第二个模块不需要重写create方法,直接重写钩子方法加判断逻辑即可:

# 第二个模块内的helpdesk.ticket实现(_inherit继承)
def _allow_run_create_extra(self, create_vals, created_record):
    # 写入自定义判断规则,不满足条件直接返回False阻断原有逻辑
    if not 你的自定义判断条件:
        return False
    return super()._allow_run_create_extra(create_vals, created_record)

该实现符合Odoo官方开发规范,后续其他模块需要同类控制时也可直接重写该钩子,不会出现逻辑冲突。

方案2:无法修改第一个自定义模块(如为第三方维护模块)

通过显式指定super调用的类层级,跳过第一个模块的create逻辑即可,不需要复制全量代码。注意需要在第二个模块的__manifest__.py中添加对第一个自定义模块的依赖,保证模块加载顺序正确:

# 第二个模块内的代码,先导入第一个模块的HelpdeskTicket类
from odoo.addons.your_first_helpdesk_module.models.helpdesk_ticket import HelpdeskTicket as FirstModuleTicket

class HelpdeskTicket(models.Model):
    _inherit = 'helpdesk.ticket'

    @api.model
    def create(self, vals):
        # 优先执行第二个模块的自定义判断逻辑
        if 你的自定义条件不成立:
            # 直接调用第一个模块父类(即Odoo原生helpdesk.ticket)的create方法,跳过第一个模块的附加逻辑
            res = super(FirstModuleTicket, self).create(vals)
            # 可在此处添加第二个模块自身需要的独立逻辑
            return res
        # 条件成立时正常走MRO链,会依次执行第一个自定义模块、原生模型的create逻辑
        res = super().create(vals)
        # 可在此处添加第二个模块自身需要的后置逻辑
        return res

不推荐全量复制重写方案的原因

复制原有create代码全量重写的方式维护成本极高:后续第一个模块如果迭代更新create方法内的逻辑,复制的代码不会同步变更,极易出现版本兼容bug。

内容的提问来源于stack exchange,提问作者xixo222

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:03:33