如何修改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,查找方法:- 开启Odoo开发者模式
- 进入「设置 > 技术 > 动作 > 窗口动作」
- 搜索目标模型(比如
hr.employee),找到对应的树形视图动作,复制它的「外部标识符」
- 批量删除适配:这个逻辑同样支持批量删除,删除完成后会直接跳回树形视图,无需额外修改。
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
相关产品推荐
相关产品推荐

