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

如何修改Odoo的unlink方法?实现删除记录后跳转至树形视图

如何修改Odoo的unlink方法,实现删除记录后跳转至树形视图

要实现删除记录后直接跳转到对应模型的树形视图,而不是加载下一条记录,核心思路是重写目标模型的unlink方法,在完成删除操作后返回一个指向树形视图的窗口动作(Window Action),替代Odoo默认的返回逻辑。

下面以员工模型(hr.employee)为例,一步步实现:

1. 创建/准备自定义模块

首先确保你有一个可继承目标模型的自定义模块,模块的__manifest__.py需要依赖目标模型所在的基础模块(比如员工模型依赖hr模块):

# __manifest__.py
{
    'name': 'Custom Delete Redirect',
    'version': '1.0',
    'depends': ['hr'],  # 依赖基础模块,其他模型替换为对应模块名
    'data': [],
    'installable': True,
    'auto_install': False,
}

2. 重写unlink方法

在模块的models目录下创建(或修改)Python文件,继承目标模型并重写unlink方法:

from odoo import models, api

class HrEmployeeCustom(models.Model):
    _inherit = 'hr.employee'  # 继承员工模型,其他模型替换为对应模型名

    @api.multi
    def unlink(self):
        # 先执行Odoo默认的删除逻辑
        super(HrEmployeeCustom, self).unlink()
        
        # 获取对应树形视图的窗口动作(替换为你需要的视图Action ID)
        tree_action = self.env.ref('hr.open_view_employee_list').read()[0]
        
        # 返回动作,让系统跳转到树形视图
        return tree_action

关键细节说明:

  • env.ref()的参数:这里的hr.open_view_employee_list是员工模块树形视图对应的窗口动作的外部标识符(External ID)。不同模型需要替换为对应的ID,查找方法:
    1. 开启Odoo开发者模式
    2. 进入「设置 > 技术 > 动作 > 窗口动作」
    3. 搜索目标模型(比如hr.employee),找到对应的树形视图动作,复制它的「外部标识符」
  • 批量删除适配:这个逻辑同样支持批量删除,删除完成后会直接跳回树形视图,无需额外修改。

3. 测试效果

安装(或升级)你的自定义模块后:

  1. 打开任意员工的表单视图
  2. 点击「动作 > 删除」(或表单右上角的删除按钮)
  3. 确认删除后,系统会直接跳转至员工的树形列表视图,而非加载下一条记录

其他模型示例(以客户模型res.partner为例)

如果要给客户模型实现同样的逻辑,只需修改继承的模型和对应的动作ID:

from odoo import models, api

class ResPartnerCustom(models.Model):
    _inherit = 'res.partner'

    @api.multi
    def unlink(self):
        super(ResPartnerCustom, self).unlink()
        # 客户树形视图的窗口动作External ID,需根据实际系统确认
        tree_action = self.env.ref('base.action_partner_tree').read()[0]
        return tree_action

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 09:22:32