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

Odoo 16继承Widget:迁移始终显示“查看更多”的M2O组件代码

Odoo 16 迁移Many2One“查看更多”始终显示的定制方案

在Odoo 16中,前端组件结构和语法规范有不少调整,以下是适配后的实现代码:

odoo.define('customized_m2o_widget.Fields', function (require) {
    "use strict";

    const { FieldMany2One } = require('web.relational_fields');
    const core = require('web.core');
    const _t = core._t;

    FieldMany2One.include({
        async _search(searchValue = "") {
            // 调用父类方法获取搜索结果
            const values = await this._super(...arguments);
            
            // 检查结果中是否已存在“查看更多”选项,不存在则添加
            if (!this._hasSearchMore(values)) {
                const domain = this.record.getDomain(this.recordParams);
                const context = {
                    ...this.record.getContext(this.recordParams),
                    ...this.additionalContext
                };
                values = this._manageSearchMore(values, searchValue.trim(), domain, context);
            }
            
            return values;
        },

        /**
         * 辅助方法:检查结果列表是否包含“查看更多”选项
         * @param {Array} values 搜索结果数组
         * @returns {Boolean} 是否存在查看更多选项
         */
        _hasSearchMore(values) {
            return values.some(item => item.label === _t("Search More..."));
        }
    });

    return FieldMany2One;
});

关键调整说明

  • ES6语法适配:使用解构导入替代旧版的变量赋值,用扩展运算符...合并上下文对象,符合Odoo 16的前端代码规范
  • 避免重复添加:新增_hasSearchMore方法检查结果中是否已存在“查看更多”,防止重复渲染
  • 逻辑简化:不再通过判断结果数量与limit的关系,直接确保“查看更多”始终存在(只要还未添加)

部署步骤

  1. 将上述代码保存到模块目录下的customized_m2o_widget/static/src/js/fields.js
  2. 在模块的__manifest__.py中添加资源加载配置:
'assets': {
    'web.assets_backend': [
        'customized_m2o_widget/static/src/js/fields.js',
    ],
},
  1. 升级模块并刷新页面即可生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 21:42:47