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

Odoo15中扩展继承form_view.js时extend/include不生效如何解决

Odoo15 扩展FormRenderingEngine的process_group方法不生效解决方案

扩展不生效的核心原因有三点:

  • 自定义JS模块未将扩展后的类注册回Odoo表单视图体系,单纯调用extend生成的新类不会自动替换框架内原有类的引用
  • Odoo15中FormRenderingEngine是FormRenderer的内部依赖,并非可直接替换的全局公共类,未重新绑定的情况下FormRenderer仍会调用原生未修改的渲染引擎
  • 你写的扩展代码存在语法错误:末尾多写了一个闭合花括号,且未调用原生_super方法,会直接打断原有表单渲染流程

正确实现方式

1. 编写自定义扩展JS

不要直接返回extend生成的新类,通过include方法给原生类打补丁,同时将重写后的渲染引擎重新绑定到FormRenderer上,代码示例如下:

odoo.define('your_custom_module.CustomFormRenderPatch', function (require) {
    "use strict";
    // 引入所需依赖
    const FormRenderingEngine = require('web.FormRenderingEngine');
    const FormRenderer = require('web.FormRenderer');

    // 重写process_group方法
    FormRenderingEngine.include({
        process_group: function ($group) {
            // 优先执行原生逻辑,避免破坏原有渲染流程
            const originResult = this._super.apply(this, arguments);
            
            // 此处写入自定义业务逻辑
            console.log('自定义process_group逻辑触发', $group);

            return originResult;
        }
    });

    // 关键操作:将重写后的渲染引擎绑定到FormRenderer实例,否则扩展不会被调用
    FormRenderer.include({
        init: function () {
            this._super.apply(this, arguments);
            this.renderingEngine = new FormRenderingEngine(this);
        }
    });
});

2. 正确加载JS资源

将上述JS文件存放到自定义模块的静态资源路径下,例如your_custom_module/static/src/js/form_render_patch.js,随后在模块的__manifest__.py中配置资源加载,确保该文件在web模块原生form_view.js之后加载:

'assets': {
    'web.assets_backend': [
        'your_custom_module/static/src/js/form_render_patch.js',
    ],
},

同时确认__manifest__.py的依赖列表中包含web模块,保证原生资源提前加载。

3. 生效验证注意事项

  • 核心组件重写必须使用include打补丁,extend方法用于创建新的子类,不会修改原生类的行为
  • 重写实例方法时必须调用this._super.apply(this, arguments)执行原有逻辑,否则会导致表单分组渲染完全崩溃
  • 模块升级后必须清空浏览器缓存、重启Odoo服务,静态JS资源的浏览器缓存是修改不生效的常见诱因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:18:33