Odoo自定义模块:实现Tree View行点击在新标签页打开表单视图
嘿,我来帮你解决这个Odoo模块里的Many2Many表格交互问题!下面分两种方案给你详细说明:
方案一:实现点击行在新标签页打开表单视图(理想状态)
要做到这一点,我们需要自定义一个继承自原生many2many部件的JS组件,修改行点击的默认逻辑:
- 创建自定义JS文件
在你的模块目录下新建static/src/js/many2many_new_tab.js,写入以下代码:
odoo.define('your_module_name.many2many_new_tab', function (require) { "use strict"; var Many2ManyField = require('web.Many2ManyField'); var core = require('web.core'); var Many2ManyNewTab = Many2ManyField.extend({ // 重写Tree视图的行点击事件 _onRowClicked: function (ev) { ev.stopPropagation(); const record = ev.data.record; // 获取关联模型名和记录ID const model = this.field.relation; const resId = record.res_id; // 构造表单视图的访问URL const url = `/web#id=${resId}&model=${model}&view_type=form`; // 在新标签页打开 window.open(url, '_blank'); }, }); // 注册自定义部件 core.component_registry.add('many2many_new_tab', Many2ManyNewTab); return Many2ManyNewTab; });
⚠️ 记得把代码里的your_module_name替换成你实际的模块名称!
- 引入JS文件到模块资源
在模块的views/assets.xml中添加以下内容,让Odoo加载我们的自定义JS:
<odoo> <data> <template id="assets_backend" name="many2many new tab assets" inherit_id="web.assets_backend"> <xpath expr="." position="inside"> <script type="text/javascript" src="/your_module_name/static/src/js/many2many_new_tab.js"/> </xpath> </template> </data> </odoo>
- 在视图中使用自定义部件
把原来的widget="many2many"改成我们自定义的部件名:
<page string="Órdenes a costear"> <field string="Órdenes a costear" name="orders" widget="many2many_new_tab" /> </page>
做完这些配置,升级模块后,点击表格行就会在新标签页打开对应的表单视图啦!
方案二:优化弹窗体验(如果新标签页方案受限)
如果因为权限或其他限制没法用新标签页,可以从这几个方面优化默认弹窗:
- 调整弹窗尺寸
直接在字段上添加modal_size属性,支持small、large、extra_large三种尺寸:
<page string="Órdenes a costear"> <field string="Órdenes a costear" name="orders" widget="many2many" modal_size="large" /> </page>
- 使用精简的弹窗专用表单视图
给关联模型创建一个只包含关键字段的表单视图,然后在字段里指定这个视图的ID:
<page string="Órdenes a costear"> <field string="Órdenes a costear" name="orders" widget="many2many" view_id="your_module_name.order_popup_form_view" /> </page>
(需要先在关联模型的视图定义中创建order_popup_form_view,只保留必要的字段和布局,减少弹窗的冗余信息)
- 添加快捷操作按钮
在弹窗的表单视图里添加常用的快捷按钮(比如保存、关闭),让操作更流畅,不用每次都点右上角的按钮。
内容的提问来源于stack exchange,提问作者damores
相关产品推荐
相关产品推荐

