You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Odoo 12自定义模块关联字段创建编辑弹窗改当前窗口需求

在Odoo 12中修改关联字段「创建并编辑」的打开方式

当然可行!你可以通过继承并修改Odoo自带的many2many_tags组件的JavaScript逻辑,把默认的弹窗改成在当前窗口或表单内打开创建视图。下面是具体的实现步骤:

1. 创建自定义JavaScript文件

在你的模块中新建一个JS文件(比如static/src/js/many2many_tags_custom.js),继承原有的Many2ManyTags组件并重写_searchCreatePopup方法:

odoo.define('your_module_name.many2many_tags_custom', function(require) {
    "use strict";

    var Many2ManyTags = require('web.Many2ManyTags');
    var core = require('web.core');
    var _t = core._t;

    Many2ManyTags.include({
        _searchCreatePopup: function (view, ids, context) {
            // 只针对「创建并编辑」操作修改逻辑
            if (view === 'create') {
                var self = this;
                // 调用do_action打开表单视图,替代弹窗
                this.do_action({
                    type: 'ir.actions.act_window',
                    res_model: this.field.relation, // 关联模型(这里是survey.question)
                    views: [[false, 'form']], // 直接打开表单视图
                    context: _.extend({}, 
                        this.record.getContext(this.recordParams), 
                        context || {}, 
                        {
                            // 传递默认关联值,对应你的page_id上下文
                            default_page_id: this.record.data.id
                        }
                    ),
                    target: 'current', // 在当前窗口打开(替换现有视图)
                    // 如果想在当前表单内嵌入打开,可改为target: 'inline'
                    flags: {
                        form: {
                            action_buttons: true,
                            save_and_close: true // 保存后自动关闭返回原表单
                        }
                    }
                }, {
                    // 创建表单关闭后,刷新当前字段数据
                    on_close: function () {
                        self.reload();
                    }
                });
            } else {
                // 搜索操作保留原有的弹窗逻辑
                return this._super.apply(this, arguments);
            }
        },
    });

    return Many2ManyTags;
});

2. 在模块配置中加载JS文件

修改模块的__manifest__.py,把刚才的JS文件添加到后端资源中:

{
    # ... 其他配置项 ...
    'assets': {
        'web.assets_backend': [
            'your_module_name/static/src/js/many2many_tags_custom.js',
        ],
    },
}

3. 验证效果

重启Odoo服务并升级你的模块后,再点击question_ids字段的「创建并编辑」按钮,就会在当前窗口打开问卷问题的创建表单,保存后会自动返回原问卷表单并刷新关联字段的数据。

关键说明

  • 我们通过include方法继承原组件,只修改创建操作的逻辑,保留了搜索操作的原有弹窗行为。
  • target: 'current'会让创建表单在当前视图容器中打开,替代原有的问卷视图;如果希望在原表单内嵌入打开(不跳转视图),可以改为target: 'inline'(需要视图支持内嵌表单)。
  • 上下文里的default_page_id确保创建的问题自动关联到当前页面,和你原来视图中设置的context="{'page_id': active_id}"对应。

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

火山引擎 最新活动