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'), / ...
随机推荐
- 16进制字符串转BCD码
15位IMEI字符串转8位BCD码 public static string SwapStr(string str) { return (str.Substring(1, 1) + str.Subst ...
- mui div滚动阻止触发下拉刷新
function orderListScroll () { var _orderObj = document.querySelector('.circulation-loan-list') //div ...
- 数据可视化之powerBI基础(十九)学会使用Power BI的参数,轻松搞定动态分析
https://zhuanlan.zhihu.com/p/55295072 静态的分析经常不能满足实际分析的需要,还需要引入动态分析,通过调节某个维度的增减变化来观察对分析结果的影响.在PowerBI ...
- Video 自动播放
先说ios ios之前的政策是视频只能在用户主动操作后才能播放,且播放时必须全屏. 随着 iOS 10 的正式发布,Safari 也迎来了大量更新,首先划出重点:1)iOS 10 Safari 支持特 ...
- GitHub 热点速览 Vol.28:有品位程序员的自我修养
作者:HelloGitHub-小鱼干 摘要:一个程序员除了技术好,还得品位高,有什么比一个高颜值的 GUI 更能体现你品味的呢?rocketredis 就是一个高颜值.简约的 Redis 管理界面,比 ...
- 没内鬼,来点干货!SQL优化和诊断
SQL优化与诊断 Explain诊断 Explain各参数的含义如下: 列名 说明 id 执行编号,标识select所属的行.如果在语句中没有子查询或关联查询,只有唯一的select,每行都将显示1. ...
- 当输入一个 URL,实际会发生什么?
从一个经典的面试题说起 从输入URL到页面展现的过程: 输入URL后,会先进行域名解析.优先查找本地host文件有无对应的IP地址,没有的话去本地DNS服务器查找,还不行的话,本地DNS服务器会去找根 ...
- Ethical Hacking - Web Penetration Testing(10)
SQL INJECTION SQLMAP Tool designed to exploit SQL injections. Works with many DB types, MySQL, MSSQL ...
- Python Ethical Hacking - MAC Address & How to Change(2)
FUNCTIONS Set of instructions to carry out a task. Can take input, and return a result. Make the cod ...
- 【软件安装】CentOS7安装Tengine_2_3_2(Nginx 1_17_0)
简单比较一下Tengine 和Nginx 背景 使用最新的软件,可以处理一些bug,文章对CentOS6不做介绍(不会用) 推荐使用Tengine,理由是淘宝再用,兼容 Nginx 可以随时切换 Te ...