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'), / ...
随机推荐
- C# DataTable与Excel读取与导出
/// <summary> /// Excel->DataTable /// </summary> /// <param name="filePath&q ...
- day15 作业
day15 作业 目录 day15 作业 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第一题 ===================题目一=================== input ...
- 装机预备技能,Linux系统简介,安装Linux系统,Linux基本操作-云计算学习(2)
装机预备技能 问题 要求安装一台可用的KVM服务器: RHEL与CentOS系统有什么关联? Linux系统中第三块SCSI硬盘如何表示? 步骤 实现此案例需要按照如下步骤进行. 步骤一:RHEL系统 ...
- CSS(六)- 内容布局 - Flexbox
Flexbox是CSS3提供的用于布局的一套新属性,是为了应对行内块.浮动和表格格式产生的问题而生的.其包含针对容器(弹性容器,flex container)和针对其直接子元素(弹性项,flex it ...
- lottery+web2
lottery 题目分析 题目给了一个彩票网站,经过页面的探索,没有发现明显漏洞,进行目录扫描,发现该站存在.git文件 猜测存在源码泄露,使用githack利用: 获得网页源码,进行源码分析 源码审 ...
- Unity-ECS-实践
Archetypes原型 (它的存在使得遍历组件的命中率非常高) Archetype是一个容器,Unity规定每个ArcheType的大小16kb,不够就再开.始终保存内存的连续性 World 世界 ...
- 媳妇儿喜欢玩某音中的动漫特效,那我就用python做一个图片转化软件。
最近某音上的动漫特效特别火,很多人都玩着动漫肖像,我媳妇儿也不例外.看着她这么喜欢这个特效,我决定做一个图片处理工具,这样媳妇儿的动漫头像就有着落了.编码 为了快速实现我们的目标,我们 ...
- three.js 绘制3d地图
通过地图数据配合three可以做出非常酷炫的地图,在大数据展示中十分常见. 这篇郭先生就来说说使用three.js几何体制作3D地图.在线案例点击原文地址. 地图的数据是各个地图块的点数组,通过THR ...
- CentOS开机启动不了修复
1,如果启动时进度条,先修改为日志启动 启动后快速按任何键(Enter除外)进入如下界面 在按e进入 选择第二个选项卡 在按e进入将红色部分 rhgb quiet 删除,然后按Enter,在按b重启 ...
- Ethical Hacking - NETWORK PENETRATION TESTING(21)
MITM - Code Injection Inject javascript or HTML code into pages. Code gets executed on target machin ...