配置项效果图

odoo中给系统添加配置项有两种方式,

一种是使用odoo自带的设置,在设置中添加配置项;效果如下图,

第二种是在模块中自定义一个配置项管理菜单,在菜单form视图下添加配置项;效果如下图,

使用odoo自带配置项

添加model

models/res_config_settings.py

  1. from odoo import models, fields, api
  2.  
  3. class ResConfigSettings(models.TransientModel):
  4. _inherit = 'res.config.settings'
  5.  
  6. dingtalk_corp_id = fields.Char(string='钉钉corpId')
  7. dingtalk_app_key = fields.Char(string='钉钉AppKey')
  8. dingtalk_app_secret = fields.Char(string='钉钉AppSecret')
  9. dingtalk_agent_id = fields.Char(string='钉钉AgentId')
  10. system_ip = fields.Char(string="系统ip端口地址")
  11.  
  12. def set_values(self):
  13. super(ResConfigSettings, self).set_values()
  14. params = self.env['ir.config_parameter'].sudo()
  15. params.set_param('dingtalk_corp_id', self[0].dingtalk_corp_id)
  16. params.set_param('dingtalk_app_key', self[0].dingtalk_app_key)
  17. params.set_param('dingtalk_app_secret', self[0].dingtalk_app_secret)
  18. params.set_param('dingtalk_agent_id', self[0].dingtalk_agent_id)
  19. params.set_param('system_ip', self[0].system_ip)
  20.  
  21. @api.model
  22. def get_values(self):
  23. res = super(ResConfigSettings, self).get_values()
  24. params = self.env['ir.config_parameter'].sudo()
  25. res.update(
  26. dingtalk_corp_id=params.get_param('dingtalk_corp_id'),
  27. dingtalk_app_key=params.get_param('dingtalk_app_key'),
  28. dingtalk_app_secret=params.get_param('dingtalk_app_secret'),
  29. dingtalk_agent_id=params.get_param('dingtalk_agent_id'),
  30. system_ip=params.get_param('system_ip'),
  31. )
  32. return res
  33.  
  34. def sys_group(self):
  35. self.env["inherit_group"].sys_group()

res_config_settings.py

记得在__init__.py中进行引用。

继承odoo配置视图并添加配置项

views/res_config_settings_view.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <odoo>
  3. <!-- View -->
  4. <record id="res_config_settings_view_form" model="ir.ui.view">
  5. <field name="name">res.config.settings.view.form.inherit.dingtalk_connector</field>
  6. <field name="model">res.config.settings</field>
  7. <field name="inherit_id" ref="base.res_config_settings_view_form"/>
  8. <field name="arch" type="xml">
  9. <xpath expr="//div[hasclass('settings')]" position="inside">
  10. <div class="app_settings_block" data-string="钉钉" string="钉钉" data-key="dingtalk_connector"
  11. groups="base.group_system">
  12. <h2>基本参数</h2>
  13. <div class="row mt16 o_settings_container">
  14. <div class="col-12 col-lg-12 o_setting_box">
  15. 基本参数是用于钉钉接口的身份认证,请务必填写,否则模块无法使用。其中corpId在<a href="https://open-dev.dingtalk.com/"
  16. target="_blank">钉钉开放平台</a>获取,AppKey和AppSecret的获取方法请参考<a
  17. href="https://open-doc.dingtalk.com/microapp/serverapi2/eev437" target="_blank">开发文档</a>
  18. </div>
  19. <div class="col-12 col-lg-6 o_setting_box">
  20. <div class="o_setting_right_pane">
  21. <label for="dingtalk_corp_id"/>
  22. <div class="content-group">
  23. <div class="mt16">
  24. <field name="dingtalk_corp_id"/>
  25. </div>
  26. </div>
  27. </div>
  28. </div>
  29. <div class="col-12 col-lg-6 o_setting_box">
  30. <div class="o_setting_right_pane">
  31. <label for="dingtalk_app_key"/>
  32. <div class="content-group">
  33. <div class="mt16">
  34. <field name="dingtalk_app_key"/>
  35. </div>
  36. </div>
  37. </div>
  38. </div>
  39. <div class="col-12 col-lg-6 o_setting_box">
  40. <div class="o_setting_right_pane">
  41. <label for="dingtalk_app_secret"/>
  42. <div class="content-group">
  43. <div class="mt16">
  44. <field name="dingtalk_app_secret"/>
  45. </div>
  46. </div>
  47. </div>
  48. </div>
  49. <div class="col-12 col-lg-6 o_setting_box">
  50. <div class="o_setting_right_pane">
  51. <label for="dingtalk_agent_id"/>
  52. <div class="content-group">
  53. <div class="mt16">
  54. <field name="dingtalk_agent_id"/>
  55. </div>
  56. </div>
  57. </div>
  58. </div>
  59. <div class="col-12 col-lg-6 o_setting_box">
  60. <div class="o_setting_right_pane">
  61. <label for="system_ip"/>
  62. <div class="content-group">
  63. <div class="mt16">
  64. <field name="system_ip" placeholder="http://127.0.0.1:8069/"/>
  65. </div>
  66. </div>
  67. </div>
  68. </div>
  69. </div>
  70. </div>
  71. </xpath>
  72. </field>
  73. </record>
  74. </odoo>

res_config_settings_view.xml

在__mainfest__.py中引用xml文件

  1. 'data': [
  2. 'views/res_config_settings_view.xml',
  3. ],

至此,就可以在odoo自带设置中进行模块配置项管理了。

配置项数据获取

通过如下代码可获取配置项中的dingtalk_app_key参数,其他参数同理。

  1. def get_dingtalk_config(self):
  2. contract_config = self.env["ir.config_parameter"].sudo().search([]) # 如果不行就试试将env里面改为 res.config.settings,后面单独做一个模块验证
  3. dingtalk_app_key = contract_config[0]['dingtalk_app_key']

在模块中自定义配置项菜单

添加model

因为某些原因,这里采用另一个模块的配置项。

在models/models.py文件中添加model

  1. class AssetsConfigParameter(models.Model):
  2. _name = "assets.config.parameter"
  3. _description = "xx系统配置项"
  4.  
  5. zabbix_href = fields.Char(string="zabbix api链接")
  6. zabbix_username = fields.Char(string="zabbix用户名")
  7. zabbix_password = fields.Char(string="zabbix密码")

在models/transient_models.py中添加瞬态模型

  1. from odoo import fields, models, api, exceptions
  2.  
  3. class AssetsConfigTransient(models.Model):
  4. _name = "assets.config.transient"
  5. _description = "xx系统配置项瞬态模型"
  6.  
  7. zabbix_href = fields.Char(string="zabbix api链接")
  8. zabbix_username = fields.Char(string="zabbix用户名")
  9. zabbix_password = fields.Char(string="zabbix密码")
  10.  
  11. @api.model
  12. def create(self, vals):
  13. configs = self.env["assets.config.parameter"].sudo().search([])
  14. if configs:
  15. configs[0].sudo().write(vals)
  16. else:
  17. self.env["assets.config.parameter"].sudo().create(vals)
  18. return super(AssetsConfigTransient, self).create(vals)
  19.  
  20. @api.model
  21. def default_get(self, fields_list):
  22. transients = super().default_get(fields_list)
  23. configs = self.env["assets.config.parameter"].sudo().search([])
  24. if configs:
  25. transients['zabbix_href'] = configs[0]['zabbix_href']
  26. transients['zabbix_username'] = configs[0]['zabbix_username']
  27. transients['zabbix_password'] = configs[0]['zabbix_password']
  28. return transients

记得在__init__.py文件中引用

添加views

在views/views.xml中添加如下内容

  1. <odoo>
  2. <data>
  3. <!-- xx配置项模块 开始 -->
  4. <record id="assets_config_transient_view_form" model="ir.ui.view">
  5. <field name="name">assets.config.transient.form</field>
  6. <field name="model">assets.config.transient</field>
  7. <field name="arch" type="xml">
  8. <form string="xx配置项">
  9. <sheet>
  10. <group>
  11. <field name="zabbix_href"/>
  12. <field name="zabbix_username" />
  13. <field name="zabbix_password" />
  14. </group>
  15. </sheet>
  16.  
  17. </form>
  18. </field>
  19. </record>
  20. <record id="assets_config_transient_action" model="ir.actions.act_window">
  21. <field name="name">xx配置项瞬态</field>
  22. <field name="res_model">assets.config.transient</field>
  23. <field name="view_mode">form</field>
  24. <field name="target">current</field>
  25. </record>
  26. <!-- xx配置项模块 结束 -->
  27. </data>
  28. </odoo>

在__mainfest__.py文中中引用views.xm文件,不做描述。

当然,还有在menus.xml中添加菜单,这里同样不做描述。

至此,就可以在模块菜单中设置配置项了。

配置项数据获取

通过如下代码可获取配置项中的zabbix_href参数,其他参数同理。

  1. def get_zabbix(self):
  2. configs = request.env["assets.config.parameter"].sudo().search([])
  3. 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. C# DataTable与Excel读取与导出

    /// <summary> /// Excel->DataTable /// </summary> /// <param name="filePath&q ...

  2. day15 作业

    day15 作业 目录 day15 作业 第一题 第二题 第三题 第四题 第五题 第六题 第七题 第一题 ===================题目一=================== input ...

  3. 装机预备技能,Linux系统简介,安装Linux系统,Linux基本操作-云计算学习(2)

    装机预备技能 问题 要求安装一台可用的KVM服务器: RHEL与CentOS系统有什么关联? Linux系统中第三块SCSI硬盘如何表示? 步骤 实现此案例需要按照如下步骤进行. 步骤一:RHEL系统 ...

  4. CSS(六)- 内容布局 - Flexbox

    Flexbox是CSS3提供的用于布局的一套新属性,是为了应对行内块.浮动和表格格式产生的问题而生的.其包含针对容器(弹性容器,flex container)和针对其直接子元素(弹性项,flex it ...

  5. lottery+web2

    lottery 题目分析 题目给了一个彩票网站,经过页面的探索,没有发现明显漏洞,进行目录扫描,发现该站存在.git文件 猜测存在源码泄露,使用githack利用: 获得网页源码,进行源码分析 源码审 ...

  6. Unity-ECS-实践

    Archetypes原型 (它的存在使得遍历组件的命中率非常高) Archetype是一个容器,Unity规定每个ArcheType的大小16kb,不够就再开.始终保存内存的连续性 World 世界 ...

  7. 媳妇儿喜欢玩某音中的动漫特效,那我就用python做一个图片转化软件。

    ​    最近某音上的动漫特效特别火,很多人都玩着动漫肖像,我媳妇儿也不例外.看着她这么喜欢这个特效,我决定做一个图片处理工具,这样媳妇儿的动漫头像就有着落了.编码    为了快速实现我们的目标,我们 ...

  8. three.js 绘制3d地图

    通过地图数据配合three可以做出非常酷炫的地图,在大数据展示中十分常见. 这篇郭先生就来说说使用three.js几何体制作3D地图.在线案例点击原文地址. 地图的数据是各个地图块的点数组,通过THR ...

  9. CentOS开机启动不了修复

    1,如果启动时进度条,先修改为日志启动 启动后快速按任何键(Enter除外)进入如下界面 在按e进入 选择第二个选项卡 在按e进入将红色部分 rhgb quiet 删除,然后按Enter,在按b重启 ...

  10. Ethical Hacking - NETWORK PENETRATION TESTING(21)

    MITM - Code Injection Inject javascript or HTML code into pages. Code gets executed on target machin ...