odoo13之给模块添加自定义配置项
阅读原文时间:2023年07月13日阅读:2

odoo中给系统添加配置项有两种方式,

一种是使用odoo自带的设置,在设置中添加配置项;效果如下图,

第二种是在模块中自定义一个配置项管理菜单,在菜单form视图下添加配置项;效果如下图,

添加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


res.config.settings.view.form.inherit.dingtalk_connector res.config.settings

基本参数

基本参数是用于钉钉接口的身份认证,请务必填写,否则模块无法使用。其中corpId在钉钉开放平台获取,AppKey和AppSecret的获取方法请参考开发文档

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["ir.config_parameter"].sudo().search([]) # 如果不行就试试将env里面改为 res.config.settings,后面单独做一个模块验证
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中添加如下内容





assets.config.transient.form
assets.config.transient


                </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>  

在__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']

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章