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

Odoo自定义模块:实现Tree View行点击在新标签页打开表单视图

嘿,我来帮你解决这个Odoo模块里的Many2Many表格交互问题!下面分两种方案给你详细说明:

方案一:实现点击行在新标签页打开表单视图(理想状态)

要做到这一点,我们需要自定义一个继承自原生many2many部件的JS组件,修改行点击的默认逻辑:

  1. 创建自定义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替换成你实际的模块名称!

  1. 引入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>
  1. 在视图中使用自定义部件
    把原来的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:15:45