配置项效果图

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["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中添加如下内容

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

odoo13之给模块添加自定义配置项的更多相关文章

  1. Nginx:管理HTTP模块的配置项

    参考资料<深入理解Nginx> 一个nginx.conf的例子 http { mytest_num ; server { server_name A; listen ; mytest_nu ...

  2. 开源Odoo13更新的模块功能信息(译文)

    本文来源江苏欧度软件:www.odooyun.com 本次Odoo13已于10月初发布,更新的模块有:Odoo会计模块.Odoo活动项目模块.Odoo13审批模块.Odoo评价.客户关系管理(CRM) ...

  3. 【Ecstore】为自建模块添加自定义主题模板

    做好ECSOTRE模块后,需在主题中添加模板,而添加模板页面时只有产品分类页.产品详细页.首页等内置模块的模板类型. 下面介绍如何添加一个自定义的模板类型“buildings”. 一.修改(建议复制到 ...

  4. SpringBoot2.x入门教程:引入jdbc模块与JdbcTemplate简单使用

    这是公众号<Throwable文摘>发布的第23篇原创文章,收录于专辑<SpringBoot2.x入门>. 前提 这篇文章是<SpringBoot2.x入门>专辑的 ...

  5. Nginx的第一个模块-HelloWorld

    麻雀虽小,五脏俱全,小小的Hello World盛行于程序世界,就在于其代码虽短,但要真正运行起来,需要我们略通基本语法,稍懂编译运行环境,知晓操作过程,最后,还有一颗持之以恒,不怕折腾的心.前一阵子 ...

  6. 《深入理解Nginx》阅读与实践(四):简单的HTTP过滤模块

    一.Nginx的HTTP过滤模块特征 一个请求可以被任意个HTTP模块处理: 在普通HTTP模块处理请求完毕并调用ngx_http_send_header()发送HTTP头部或调用ngx_http_o ...

  7. nginx upstream模块

    upstream模块 upstream模块 (100%) nginx模块一般被分成三大类:handler.filter和upstream.前面的章节中,读者已经了解了handler.filter. 利 ...

  8. Nginx学习之二-配置项解析及编程实现

    在开发功能灵活的Nginx模块时,需要从配置文件中获取特定的信息.不过,我们并不需要再编写一套读取配置的系统,Nginx已经为用户提供了强大的配置项解析机制,同时还支持“-s reload”命令,可以 ...

  9. ThinkPHP - 常用的配置项

    <?php return array( // 设置禁止访问的模块列表 // 'MODULE_DENY_LIST' => array('Common','Runtime','Api'), / ...

随机推荐

  1. 一、python 基础之基础语法

    一.变量命名规则 1.驼峰命名 大驼峰 MyName = 'leon' 小驼峰 myName = 'Amy' 2.下划线命名 my_name = 'jack' 建议:变量名或者文件名使用下划线命名方式 ...

  2. redis(十七):Redis 安装,部署(WINDOWS环境下)

    1.下载Redis安装文件, 我选择的是 3.0.504 版本,有zip或msi可供下载.   2.解压缩后,打开安装目录 双击redis-server.exe启动redis服务器,双击redis-c ...

  3. Linux02 /Linux命令简单使用

    Linux02 /Linux命令简单使用 目录 Linux02 /Linux命令简单使用 1. 远程连接Linux 2. 目录相关操作 3. 简单命令 1. 远程连接Linux 远程连接工具 Xshe ...

  4. 老司机带你玩转面试(4):Redis 高可用之哨兵模式

    前文回顾 建议前面文章没看过的同学先看下前面的文章: 「老司机带你玩转面试(1):缓存中间件 Redis 基础知识以及数据持久化」 「老司机带你玩转面试(2):Redis 过期策略以及缓存雪崩.击穿. ...

  5. 云原生时代高性能Java框架—Quarkus(一)

    --- Quarkus&GraalVM介绍.创建并启动第一个项目 Quarkus系列博文 Quarkus&GraalVM介绍.创建并启动第一个项目 构建Quarkus本地镜像.容器化部 ...

  6. Salesforce LWC学习(十九) 针对 lightning-input-field的label值重写

    本篇参考: https://salesforcediaries.com/2020/02/24/how-to-override-lightning-input-field-label-in-lightn ...

  7. kubernetes+Azure DevOps实现.Net Core项目的自动化部署&均衡负载

    1. 前言 2. Net Core项目本身的准备 2.1 dockerfile 2.2 创建kubernetes用于helm的chart包 2.2.1 说明 2.2.2 chart文件目录和文件组成 ...

  8. iview实战 : 全屏去头去尾的弹窗

    <template> <Button @click="modal3 = true" >No title bar</Button> <Mod ...

  9. 设计模式:proxy模式

    目的:为其他对象提供一种代理以控制对这个对象的访问 理解:尽管Decorator的实现部分与代理相似,但Decorator的目的不一样.Decorator为对象添加一个或多个功能,而代理则控制对对象的 ...

  10. springAOP的三种实现方式

    springAOP的实现方式 三种 纯XML方式,XML+注解,纯注解方式. Spring 实现AOP思想使⽤的是动态代理技术 默认情况下, Spring会根据被代理对象是否实现接⼝来选择使⽤JDK还 ...