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'), / ...
随机推荐
- 04 Django模型层: Django-model进阶
一 QuerySet对象 1.1可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. Entry.objects.all()[:5] # ...
- conda install 失败 http404
最近conda install keras出现各种问题,显示配置问你,配置了清华中科大的源,都不行 估计原因是:配置各种源太多,最后全部删除只留一个清华源,成功 暴力方法直接删除C:\Users\Ad ...
- LeetCode第4题:寻找两个有序数组的中位数
double Solution::findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) ...
- gvim使用总结
我的gvim配置 set nocompatible " 关闭vi兼容 " 显示相关 set go= set number set cursorline set nowrap set ...
- bzoj4395[Usaco2015 dec]Switching on the Lights*
bzoj4395[Usaco2015 dec]Switching on the Lights 题意: n*n个房间,奶牛初始在(1,1),且只能在亮的房间里活动.每当奶牛经过一个房间,就可以打开这个房 ...
- easyui的组合网格:combogrid的选中事件
jQuery EasyUI的API文档中写到: “数据表格下拉框事件完全扩展自combo(自定义下拉框)和datagrid(数据表格)” 这也就是说,我们完全可以将combo和datagrid的事件拿 ...
- 小谢第36问:elemet - table表格修改后表格行高亮显示且定位到当前行当前页
第一次做这个需求得时候很乱,总是在表格页和修改页徘徊,总觉得什么都会,但是就是做不出自己想要得效果 其实如果先把思路搞清楚,这个问题得知识点却是不多,以下是我对表格高亮显示得思路: 首先,我会从已知得 ...
- svg 使用中的疑惑点
svg,g ,defs,symbol 都是容器元素,使用起来给人许多疑惑 svg-spirite-loader在页面生成的svg标签有什么特点? svg标签里面的symbol有什么用? 这些标签能够随 ...
- 当小程序遇见物联网IoT,几行代码搞定智能插座控制
在 5G 热潮的推动下,与其紧密结合的物联网(IoT)正日益成为个人和企业工作生活中的重要组成部分,它为企业和个人带来了操作流程的改进和更好的生活体验,随着人工智能(AI)技术的日趋成熟,IoT 与 ...
- React Native 控制一个component的显示隐藏
// 首先在constructor里: this.state = { visible: false } // 然后在点击事件设置: this.setState({ visible: t ...