odoo中给系统添加配置项有两种方式,
一种是使用odoo自带的设置,在设置中添加配置项;效果如下图,
第二种是在模块中自定义一个配置项管理菜单,在菜单form视图下添加配置项;效果如下图,
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中进行引用。
views/res_config_settings_view.xml
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']
因为某些原因,这里采用另一个模块的配置项。
在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.xml中添加如下内容
</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>
在__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']
手机扫一扫
移动阅读更方便
你可能感兴趣的文章