Odoo 14如何修改SearchPanel的DEFAULT_LIMIT并添加至设置
Odoo 14 SearchPanel 默认限制值修改及系统设置配置
一、后端配置(新增系统设置可配置字段)
先在系统设置中添加可自定义的字段,让用户能按需调整SearchPanel的默认显示条数:
- 在模块的
models/res_config_settings.py中新增字段:
from odoo import models, fields, api class ResConfigSettings(models.TransientModel): _inherit = 'res.config.settings' search_panel_default_limit = fields.Integer(string='SearchPanel 默认显示条数', default=500) def get_values(self): res = super(ResConfigSettings, self).get_values() res.update(search_panel_default_limit=int(self.env['ir.config_parameter'].sudo().get_param('your_module_name.search_panel_default_limit', 500))) return res def set_values(self): super(ResConfigSettings, self).set_values() self.env['ir.config_parameter'].sudo().set_param('your_module_name.search_panel_default_limit', self.search_panel_default_limit or 500)
- 在模块的
views/res_config_settings_views.xml中把配置项添加到系统设置页面:
<odoo> <record id="res_config_settings_view_form_inherit" model="ir.ui.view"> <field name="name">res.config.settings.view.form.inherit.search.panel.limit</field> <field name="model">res.config.settings</field> <field name="inherit_id" ref="base.res_config_settings_view_form"/> <field name="arch" type="xml"> <xpath expr="//div[@id='general']" position="inside"> <div class="col-xs-12 col-md-6 o_setting_box"> <div class="o_setting_right_pane"> <label for="search_panel_default_limit"/> <div class="text-muted"> 设置SearchPanel视图默认显示的最大条目数 </div> <div class="content-group"> <field name="search_panel_default_limit" class="oe_inline"/> </div> </div> </div> </xpath> </field> </record> </odoo>
二、前端JS扩展ActionModel
通过扩展ActionModel,替换SearchPanel的默认限制值,优先读取系统设置中的配置:
在模块的static/src/js/search_panel_limit_extension.js中编写扩展代码:
const ActionModel = require("web/static/src/js/views/action_model.js"); const session = require('web.session'); class SearchPanelModelExtensionChangeLimit extends ActionModel.Extension { async prepareState() { // 执行父类原有逻辑 await super.prepareState(...arguments); // 从系统参数获取配置的限制值 const limit = await session.rpc('/web/dataset/call_kw', { model: 'ir.config_parameter', method: 'get_param', args: ['your_module_name.search_panel_default_limit', 500], kwargs: { context: session.user_context } }); // 覆盖SearchPanel的默认limit if (this.state.searchPanel) { this.state.searchPanel.limit = parseInt(limit, 10); } } } // 注册扩展到ActionModel ActionModel.include({ constructor: function () { this._super(...arguments); this.registerExtension(SearchPanelModelExtensionChangeLimit); } });
三、加载JS文件
在模块的views/assets.xml中配置JS文件的加载:
<odoo> <template id="assets_backend" name="search panel limit assets" inherit_id="web.assets_backend"> <xpath expr="." position="inside"> <script type="text/javascript" src="/your_module_name/static/src/js/search_panel_limit_extension.js"></script> </xpath> </template> </odoo>
四、模块安装与测试
- 升级或安装目标模块
- 进入「设置」-「通用设置」,找到新增的SearchPanel配置项,调整数值
- 打开带有SearchPanel的视图(如列表视图侧边搜索面板),验证默认显示条数是否生效
内容的提问来源于stack exchange,提问作者Makis
相关产品推荐
相关产品推荐

