Odoo模块安装/升级时自动重定向至模块视图实现咨询
实现Odoo模块安装/升级后自动重定向到指定视图
要实现和Odoo内置Website模块一样的安装/升级后自动重定向效果,需要结合后端钩子标记和前端JS检测跳转两部分来完成,以下是具体实现步骤:
1. 后端钩子:设置重定向标记
通过模块的安装/升级钩子,给系统添加一个临时标记,用于告知前端需要执行重定向操作。
步骤1-1:创建钩子文件
在模块根目录下新建hooks.py,写入以下代码:
from odoo import api, SUPERUSER_ID def post_install_hook(cr, registry): env = api.Environment(cr, SUPERUSER_ID, {}) # 存储需要跳转的视图XML ID,替换为你模块的目标视图ID env['ir.config_parameter'].set_param('ticket_booking.post_install_redirect', 'ticket_booking.view_ticket_booking_main') def post_upgrade_hook(cr, registry): # 升级模块时同样设置标记 env = api.Environment(cr, SUPERUSER_ID, {}) env['ir.config_parameter'].set_param('ticket_booking.post_install_redirect', 'ticket_booking.view_ticket_booking_main')
步骤1-2:注册钩子到模块清单
修改模块的__manifest__.py,添加钩子注册:
{ # ... 其他已有配置 'post_init_hook': 'post_install_hook', 'post_upgrade_hook': 'post_upgrade_hook', }
2. 前端JS:检测标记并执行重定向
在Web客户端加载时检查后端设置的标记,若存在则跳转到指定视图,之后清除标记避免重复跳转。
步骤2-1:编写重定向JS文件
在模块的static/src/js目录下新建redirect_after_install.js:
odoo.define('ticket_booking.redirect_after_install', function (require) { "use strict"; var core = require('web.core'); var session = require('web.session'); var ActionManager = require('web.ActionManager'); ActionManager.include({ init: function () { this._super.apply(this, arguments); this._checkRedirectFlag(); }, _checkRedirectFlag: function () { var self = this; // 请求后端获取重定向标记 session.rpc('/web/session/get_session_parameter', {key: 'ticket_booking.post_install_redirect'}) .then(function (view_id) { if (view_id) { // 执行跳转,替换res_model和view_mode为你的模块对应配置 self.do_action({ type: 'ir.actions.act_window', res_model: 'ticket.booking', view_mode: 'tree,form', view_id: view_id, target: 'current' }); // 清除标记,防止重复跳转 session.rpc('/web/session/set_session_parameter', {key: 'ticket_booking.post_install_redirect', value: false}); } }); } }); return core; });
步骤2-2:加载JS文件到后端资产
在模块的views目录下新建assets.xml,将JS文件注入到后端页面:
<odoo> <template id="assets_backend" name="ticket_booking assets" inherit_id="web.assets_backend"> <xpath expr="." position="inside"> <script type="text/javascript" src="/ticket_booking/static/src/js/redirect_after_install.js"/> </xpath> </template> </odoo>
关键注意事项
- 替换代码中的
ticket_booking.view_ticket_booking_main为你模块实际的目标视图XML ID - 替换
res_model: 'ticket.booking'为你模块对应的业务模型名称 - 测试时,安装/升级模块后若未自动跳转,可手动刷新一次页面(JS会在页面加载时检测标记)
内容的提问来源于stack exchange,提问作者user20895058
相关产品推荐
相关产品推荐

