odoo13之给模块添加自定义配置项
配置项效果图
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之给模块添加自定义配置项的更多相关文章
- Nginx:管理HTTP模块的配置项
参考资料<深入理解Nginx> 一个nginx.conf的例子 http { mytest_num ; server { server_name A; listen ; mytest_nu ...
- 开源Odoo13更新的模块功能信息(译文)
本文来源江苏欧度软件:www.odooyun.com 本次Odoo13已于10月初发布,更新的模块有:Odoo会计模块.Odoo活动项目模块.Odoo13审批模块.Odoo评价.客户关系管理(CRM) ...
- 【Ecstore】为自建模块添加自定义主题模板
做好ECSOTRE模块后,需在主题中添加模板,而添加模板页面时只有产品分类页.产品详细页.首页等内置模块的模板类型. 下面介绍如何添加一个自定义的模板类型“buildings”. 一.修改(建议复制到 ...
- SpringBoot2.x入门教程:引入jdbc模块与JdbcTemplate简单使用
这是公众号<Throwable文摘>发布的第23篇原创文章,收录于专辑<SpringBoot2.x入门>. 前提 这篇文章是<SpringBoot2.x入门>专辑的 ...
- Nginx的第一个模块-HelloWorld
麻雀虽小,五脏俱全,小小的Hello World盛行于程序世界,就在于其代码虽短,但要真正运行起来,需要我们略通基本语法,稍懂编译运行环境,知晓操作过程,最后,还有一颗持之以恒,不怕折腾的心.前一阵子 ...
- 《深入理解Nginx》阅读与实践(四):简单的HTTP过滤模块
一.Nginx的HTTP过滤模块特征 一个请求可以被任意个HTTP模块处理: 在普通HTTP模块处理请求完毕并调用ngx_http_send_header()发送HTTP头部或调用ngx_http_o ...
- nginx upstream模块
upstream模块 upstream模块 (100%) nginx模块一般被分成三大类:handler.filter和upstream.前面的章节中,读者已经了解了handler.filter. 利 ...
- Nginx学习之二-配置项解析及编程实现
在开发功能灵活的Nginx模块时,需要从配置文件中获取特定的信息.不过,我们并不需要再编写一套读取配置的系统,Nginx已经为用户提供了强大的配置项解析机制,同时还支持“-s reload”命令,可以 ...
- ThinkPHP - 常用的配置项
<?php return array( // 设置禁止访问的模块列表 // 'MODULE_DENY_LIST' => array('Common','Runtime','Api'), / ...
随机推荐
- redis(十六):Redis 安装,部署(LINUX环境下)
第一步:下载安装包 访问https://redis.io/download 到官网进行下载.这里下载最新的4.0版本. 第二步:安装 1.通过远程管理工具,将压缩包拷贝到Linux服务器中,执行解压 ...
- Python函数06/装饰器
Python函数06/装饰器 目录 Python函数06/装饰器 内容大纲 1.装饰器 1.1 开放封闭原则 1.2 装饰器 2.今日练习 内容大纲 1.装饰器 1.装饰器 1.1 开放封闭原则 扩展 ...
- Swift开发笔记
Swift开发笔记(一) 刚开始接触XCode时,整个操作逻辑与Android Studio.Visual Studio等是完全不同的,因此本文围绕IOS中控件的设置.事件的注册来简单的了解IOS开发 ...
- bzoj3437小P的牧场
bzoj3437小P的牧场 题意: n个牧场,在每个牧场见控制站的花费为ai,在该处建控制站能控制从此处到左边第一个控制站(或边界)之间的牧场.一个牧场被控制的花费等于它到控制它的控制站之间的牧场数目 ...
- OSCP Learning Notes - WebApp Exploitation(4)
Local File Inclusion[LFI] Target Pentester Lab: Download from the following website: https://www.vul ...
- T133316 57级返校测试重测-T4-字符串的修改
大致题意: 有一个A字符串和一个B字符串, 操作将A或A的一个后缀修改为B, 求最少的操作数. 有三个操作为: 删除: 删除掉 A 中的某一个字符. 添加: 将某一个字符添加到 A 中任意位置. 替换 ...
- 【计网】图解HTTP常见知识点总结
目录 目录 目录 初识TCP/IP TCP/IP协议族4层模型 初识HTTP 请求和响应 HTTP报文 HTTP状态码 HTTP报文首部 其他的首部字段 确保WEB安全的HTTPS HTTPS工作原理 ...
- 云原生时代高性能Java框架—Quarkus(二)
--- *构建Quarkus本地镜像.容器化部署Quarkus项目* Quarkus系列博文 Quarkus&GraalVM介绍.创建并启动第一个项目 构建Quarkus本地镜像.容器化部署Q ...
- 机器学习 | 简介推荐场景中的协同过滤算法,以及SVD的使用
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第29篇文章,我们来聊聊SVD在上古时期的推荐场景当中的应用. 推荐的背后逻辑 有没有思考过一个问题,当我们在淘宝或者是 ...
- Spring Data R2DBC响应式操作MySQL
1. 前言 在使用R2DBC操作MySQL数据库 一文中初步介绍了r2dbc-mysql的使用.由于借助DatabaseClient操作MySQL,过于初级和底层,不利于开发.今天就利用Spring ...