No.1免费开源ERP:Odoo自定义字段添加到配置页中的技术分享

文 / 开源智造(OSCG)· Odoo亚太金牌服务

在Odoo18之中,配置设定于管控各类系统配置层面发挥着关键之效用,使您能够对软件予以定制,以契合您特定的业务需求。尽管 Odoo 提供了一组强劲的默认配置选项,然而有时您或许需要增添自定义字段,从而能更好地与您的业务流程相契合。本指南将引领您达成在 Odoo 18 中向配置设定添加自定义字段的进程,并以其他交付选项拓展 Odoo 18 POS(销售点)配置的实际范例。

在 Odoo 当中,配置设置经由 res.config.settings 模型予以管理。该模型充作管理模块特定设置的集中之所,这些设置的范畴涵盖自常规的系统首选项至单个模块的特定配置选项。借由对该模型进行扩展,您能够增添契合您独特需求的新字段,进而确保您的配置设置尽可能完备且具有相关性。

扩展配置设置能够让您融入默认 Odoo 配置所未涵盖的其他参数。这对于那些需要标准选项未能涵盖的特定设置的模块而言,尤为有用。譬如,于 POS 系统之中,您或许需要对各种交付方式进行配置,并依据您的业务运营启用特定的选项。凭借添加自定义字段,您能够为用户给予更为定制化且功能更强大的设置。

将自定义字段添加到配置设置

要将自定义字段添加到 Odoo 18 中的配置设置,请按照以下关键步骤操作:

定义自定义域

第一步是通过增添自定义字段来拓展res.config.settings 模型。此过程牵涉到创建一个新的 Python 文件,您能够于其中界定其他字段并指明其属性。举例而言,您或许期望添加一个 Boolean 字段以启用或禁用某些功能,同时添加一个 Many2many 字段来选取各类交付方法。创建一个诸如 res_config_settings.py 的 Python 文件,用以拓展 res.config.settings 模型。

复制代码
from ast import literal_eval
from odoo import api, fields, models
class ResConfigSettings(models.TransientModel):
    """Extension of 'res.config.settings' for configuring delivery settings."""
    _inherit = 'res.config.settings'
    enable_delivery = fields.Boolean(string='Enable Order Types',
                                     help='This field is used to enable setting'
                                          'order types in settings')
    delivery_methods = fields.Many2many('delivery.type',
                                        string='Order Types',
                                        help='Set the delivery methods')
    @api.model
    def get_values(self):
        """Get the values from settings."""
        res = super(ResConfigSettings, self).get_values()
        icp_sudo = self.env['ir.config_parameter'].sudo()
        enable_delivery = icp_sudo.get_param('res.config.settings.enable_delivery')
        delivery_methods = icp_sudo.get_param('res.config.settings.delivery_methods')
        res.update(
            enable_delivery=enable_delivery,
            delivery_methods=[(6, 0, literal_eval(delivery_methods))] if delivery_methods else False,
        )
        return res
    def set_values(self):
        """Set the values. The new values are stored in the configuration parameters."""
        res = super(ResConfigSettings, self).set_values()
        self.env['ir.config_parameter'].sudo().set_param(
            'res.config.settings.enable_delivery', self.enable_delivery)
        self.env['ir.config_parameter'].sudo().set_param(
            'res.config.settings.delivery_methods',
            self.delivery_methods.ids)
        return res

创建自定义视图

在定义好自定义字段之后,下一步乃是创建一个视图,此视图会于配置设置当中展示这些字段。这关联到定义一个 XML 文件,该文件明确了新字段于现存配置设置表单里的显示形式和位置。借助 XML,您能够将自定义字段融入到设置视图的相应部分之中,保证它们易于获取和逻辑排布。

若要将自定义字段整合至 POS 配置设置表单当中,请于文件中定义 XML 视图,例如:res_config_settings_views.xml

复制代码
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
    <!-- Define a view to extend POS configuration settings with delivery options -->
    <record id="view_pos_configuration_form" model="ir.ui.view">
        <field name="name">pos.config.view.form.inherit.pos.order.types</field>
        <field name="model">res.config.settings</field>
        <field name="inherit_id" ref="point_of_sale.res_config_settings_view_form"/>
        <field name="arch" type="xml">
            <xpath expr="//block[@id='pos_accounting_section']" position="after">
                <div class="row mt16 o_settings_container">
                    <div class="col-12 col-lg-6 o_setting_box">
                        <div class="o_setting_left_pane">
                            <field name="enable_delivery"/>
                        </div>
                        <div class="o_setting_right_pane">
                            <label for="enable_delivery"/>
                            <div class="text-muted">
                                Delivery products based on order types
                            </div>
                            <div class="content-group mt16" invisible="enable_delivery == False">
                                <field name="delivery_methods" widget="many2many_tags"/>
                            </div>
                        </div>
                    </div>
                </div>
            </xpath>
        </field>
    </record>
</odoo>

在定义完自定义字段并创建好视图之后,您需要对模块列表予以更新,并安装自定义模块。此步骤能够确保您的新字段融入到 Odoo 系统当中且可供运用。通过对模块列表进行更新以及安装模块,您能够让您的自定义配置设置在 Odoo 界面中得以显现并发挥效用。

于 Odoo 18 之中将自定义字段添加至配置设置,能够增强 Odoo 实例的灵活性与功能。借由扩展 res.config.settings 模型并创建自定义视图,您能够融入满足特定业务需求的其他参数。此种方法不但能够优化用户体验,还能够确保您的配置设置与您的操作要求保持契合。

无论您是对 POS 设置进行自定义,还是配置其他模块,添加和管理自定义字段的能力,皆为定制 Odoo 以适配您的业务流程提供了极具价值的选项。经由本指南,您能够安心地拓展 Odoo 配置设置,并强化系统的功能。

相关推荐
CryptoPP9 分钟前
springboot 对接马来西亚数据源API等多个国家的数据源
spring boot·后端·python·金融·区块链
xcLeigh17 分钟前
OpenCV从零开始:30天掌握图像处理基础
图像处理·人工智能·python·opencv
大乔乔布斯17 分钟前
AttributeError: module ‘smtplib‘ has no attribute ‘SMTP_SSL‘ 解决方法
python·bash·ssl
明灯L30 分钟前
《函数基础与内存机制深度剖析:从 return 语句到各类经典编程题详解》
经验分享·python·算法·链表·经典例题
databook31 分钟前
不平衡样本数据的救星:数据再分配策略
python·机器学习·scikit-learn
碳基学AI36 分钟前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义免费下载方法
大数据·人工智能·python·gpt·算法·语言模型·集成学习
niuniu_66637 分钟前
简单的自动化场景(以 Chrome 浏览器 为例)
运维·chrome·python·selenium·测试工具·自动化·安全性测试
FearlessBlot40 分钟前
Pyinstaller 打包flask_socketio为exe程序后出现:ValueError: Invalid async_mode specified
python·flask
独好紫罗兰1 小时前
洛谷题单3-P5718 【深基4.例2】找最小值-python-流程图重构
开发语言·python·算法
正脉科工 CAE仿真1 小时前
基于ANSYS 概率设计和APDL编程的结构可靠性设计分析
人工智能·python·算法