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的关系,直接确保“查看更多”始终存在(只要还未添加)
部署步骤
- 将上述代码保存到模块目录下的
customized_m2o_widget/static/src/js/fields.js - 在模块的
__manifest__.py中添加资源加载配置:
'assets': { 'web.assets_backend': [ 'customized_m2o_widget/static/src/js/fields.js', ], },
- 升级模块并刷新页面即可生效
内容的提问来源于stack exchange,提问作者Danyah Hussein
相关产品推荐
相关产品推荐

