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

如何继承Odoo JavaScript搜索框添加=ilike运算符(适配13及以上版本)

Odoo 13+ 给字符搜索新增=ilike匹配运算符实现方案

问题原因

直接继承修改全文件不生效的核心原因是Odoo 13对前端JS组件的扩展机制做了重构,原Odoo12版本的直接复写全文件的方式不再适配,且容易和其他同组件的扩展逻辑冲突。

实现步骤

1. 配置模块资源依赖

首先在你的自定义模块的__manifest__.py中,声明对web模块的依赖,同时将自定义JS文件注入到后端资源包中:

{
    'name': 'Advanced Search Wildcard',
    'version': '13.0.1.0.0',
    'depends': ['web'],
    'assets': {
        'web.assets_backend': [
            '你的模块名/static/src/js/search_filters_extend.js',
        ],
    },
    'installable': True,
    'auto_install': False,
}

2. 编写JS增量补丁

新建你的模块名/static/src/js/search_filters_extend.js文件,采用Odoo标准的include补丁方式扩展原有Char搜索类,无需复写全量代码,仅增量新增运算符:

odoo.define('你的模块名.search_filters_extend', function (require) {
    "use strict";

    const searchFilters = require('web.view.search_filters');
    const _lt = require('web.core')._lt;

    searchFilters.Char.include({
        init: function () {
            this._super(...arguments);
            // 新增=ilike匹配运算符
            this.operators.push({
                value: '=ilike',
                text: _lt("matches")
            });
            // 如果需要调整运算符排序,可以直接重写operators数组
            // this.operators = [
            //     ...原有运算符配置,
            //     {value: '=ilike', text: _lt("matches")}
            // ]
        }
    });
});

注意不要用extend创建子类的方式扩展,这种方式不会替换全局注册的原有Char类,只有用include打补丁的方式才能修改全局生效的原类逻辑

3. 验证生效

  • 升级你的自定义模块
  • 清空浏览器缓存并重新加载Odoo后台
  • 进入任意字符字段的筛选界面,即可看到新增的matches选项,支持通配符%、_的模糊匹配

注意事项

  • Odoo ORM原生支持=ilike运算符,无需额外修改后端搜索逻辑
  • 如果存在其他模块也修改了字符搜索的运算符,只需将你的模块依赖对应的修改模块,即可保证扩展逻辑不被覆盖

内容的提问来源于stack exchange,提问作者The Agri CULTURE Guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 08:39:05