odoo13之給模塊添加自定義配置項


本文示例代碼可查看github倉庫:odoo13_custom_config_item

配置項效果圖

odoo中給系統添加配置項有兩種方式,

一種是使用odoo自帶的設置,在設置中添加配置項;效果如下圖,

 

第二種是在模塊中自定義一個配置項管理菜單,在菜單form視圖下添加配置項;效果如下圖,

 

使用odoo自帶配置項

添加model

models/res_config_settings.py

from odoo import models, fields, api


class ResConfigSettings(models.TransientModel):
    _inherit = 'res.config.settings'

    dingtalk_corp_id = fields.Char(string='釘釘corpId')
    dingtalk_app_key = fields.Char(string='釘釘AppKey')
    dingtalk_app_secret = fields.Char(string='釘釘AppSecret')
    dingtalk_agent_id = fields.Char(string='釘釘AgentId')
    system_ip = fields.Char(string="系統ip端口地址")

    def set_values(self):
        super(ResConfigSettings, self).set_values()
        params = self.env['ir.config_parameter'].sudo()
        params.set_param('dingtalk_corp_id', self[0].dingtalk_corp_id)
        params.set_param('dingtalk_app_key', self[0].dingtalk_app_key)
        params.set_param('dingtalk_app_secret', self[0].dingtalk_app_secret)
        params.set_param('dingtalk_agent_id', self[0].dingtalk_agent_id)
        params.set_param('system_ip', self[0].system_ip)

    @api.model
    def get_values(self):
        res = super(ResConfigSettings, self).get_values()
        params = self.env['ir.config_parameter'].sudo()
        res.update(
            dingtalk_corp_id=params.get_param('dingtalk_corp_id'),
            dingtalk_app_key=params.get_param('dingtalk_app_key'),
            dingtalk_app_secret=params.get_param('dingtalk_app_secret'),
            dingtalk_agent_id=params.get_param('dingtalk_agent_id'),
            system_ip=params.get_param('system_ip'),
        )
        return res

    def sys_group(self):
        self.env["inherit_group"].sys_group()
res_config_settings.py

記得在__init__.py中進行引用。

繼承odoo配置視圖並添加配置項

views/res_config_settings_view.xml

<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <!-- View -->
    <record id="res_config_settings_view_form" model="ir.ui.view">
        <field name="name">res.config.settings.view.form.inherit.dingtalk_connector</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[hasclass('settings')]" position="inside">
                <div class="app_settings_block" data-string="釘釘" string="釘釘" data-key="dingtalk_connector"
                     groups="base.group_system">
                    <h2>基本參數</h2>
                    <div class="row mt16 o_settings_container">
                        <div class="col-12 col-lg-12 o_setting_box">
                            基本參數是用於釘釘接口的身份認證,請務必填寫,否則模塊無法使用。其中corpId在<a href="https://open-dev.dingtalk.com/"
                                                                        target="_blank">釘釘開放平台</a>獲取,AppKey和AppSecret的獲取方法請參考<a
                                href="https://open-doc.dingtalk.com/microapp/serverapi2/eev437" target="_blank">開發文檔</a>
                        </div>
                        <div class="col-12 col-lg-6 o_setting_box">
                            <div class="o_setting_right_pane">
                                <label for="dingtalk_corp_id"/>
                                <div class="content-group">
                                    <div class="mt16">
                                        <field name="dingtalk_corp_id"/>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12 col-lg-6 o_setting_box">
                            <div class="o_setting_right_pane">
                                <label for="dingtalk_app_key"/>
                                <div class="content-group">
                                    <div class="mt16">
                                        <field name="dingtalk_app_key"/>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12 col-lg-6 o_setting_box">
                            <div class="o_setting_right_pane">
                                <label for="dingtalk_app_secret"/>
                                <div class="content-group">
                                    <div class="mt16">
                                        <field name="dingtalk_app_secret"/>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12 col-lg-6 o_setting_box">
                            <div class="o_setting_right_pane">
                                <label for="dingtalk_agent_id"/>
                                <div class="content-group">
                                    <div class="mt16">
                                        <field name="dingtalk_agent_id"/>
                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="col-12 col-lg-6 o_setting_box">
                            <div class="o_setting_right_pane">
                                <label for="system_ip"/>
                                <div class="content-group">
                                    <div class="mt16">
                                        <field name="system_ip" placeholder="http://127.0.0.1:8069/"/>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </xpath>
        </field>
    </record>
</odoo>
res_config_settings_view.xml

在__mainfest__.py中引用xml文件

'data': [
        'views/res_config_settings_view.xml',
    ],

至此,就可以在odoo自帶設置中進行模塊配置項管理了。

配置項數據獲取

通過如下代碼可獲取配置項中的dingtalk_app_key參數,其他參數同理。

def get_dingtalk_config(self):
    contract_config = self.env["res.config.settings"].sudo().search([])
    dingtalk_app_key = contract_config[0]['dingtalk_app_key']

 

在模塊中自定義配置項菜單

添加model

因為某些原因,這里采用另一個模塊的配置項。

在models/models.py文件中添加model

class AssetsConfigParameter(models.Model):
    _name = "assets.config.parameter"
    _description = "xx系統配置項"

    zabbix_href = fields.Char(string="zabbix api鏈接")
    zabbix_username = fields.Char(string="zabbix用戶名")
    zabbix_password = fields.Char(string="zabbix密碼")

在models/transient_models.py中添加瞬態模型

from odoo import fields, models, api, exceptions


class AssetsConfigTransient(models.Model):
    _name = "assets.config.transient"
    _description = "xx系統配置項瞬態模型"

    zabbix_href = fields.Char(string="zabbix api鏈接")
    zabbix_username = fields.Char(string="zabbix用戶名")
    zabbix_password = fields.Char(string="zabbix密碼")

    @api.model
    def create(self, vals):
        configs = self.env["assets.config.parameter"].sudo().search([])
        if configs:
            configs[0].sudo().write(vals)
        else:
            self.env["assets.config.parameter"].sudo().create(vals)
        return super(AssetsConfigTransient, self).create(vals)

    @api.model
    def default_get(self, fields_list):
        transients = super().default_get(fields_list)
        configs = self.env["assets.config.parameter"].sudo().search([])
        if configs:
            transients['zabbix_href'] = configs[0]['zabbix_href']
            transients['zabbix_username'] = configs[0]['zabbix_username']
            transients['zabbix_password'] = configs[0]['zabbix_password']
        return transients

記得在__init__.py文件中引用

 

添加views

在views/views.xml中添加如下內容

<odoo>
    <data>
        <!-- xx配置項模塊 開始 -->
            <record id="assets_config_transient_view_form" model="ir.ui.view">
                <field name="name">assets.config.transient.form</field>
                <field name="model">assets.config.transient</field>
                <field name="arch" type="xml">
                    <form string="xx配置項">
                        <sheet>
                            <group>
                                <field name="zabbix_href"/>
                                <field name="zabbix_username" />
                                <field name="zabbix_password" />
                            </group>
                        </sheet>

                    </form>
                </field>
            </record>
            <record id="assets_config_transient_action" model="ir.actions.act_window">
                <field name="name">xx配置項瞬態</field>
                <field name="res_model">assets.config.transient</field>
                <field name="view_mode">form</field>
                <field name="target">current</field>
            </record>
        <!-- xx配置項模塊 結束 -->
    </data>
</odoo>

在__mainfest__.py文中中引用views.xm文件,不做描述。

當然,還有在menus.xml中添加菜單,這里同樣不做描述。

至此,就可以在模塊菜單中設置配置項了。

 

配置項數據獲取

通過如下代碼可獲取配置項中的zabbix_href參數,其他參數同理。

def get_zabbix(self):
    configs = request.env["assets.config.parameter"].sudo().search([])
    zabbix_href = configs[0]['zabbix_href']

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM