本文主要是介绍关于ODOO中配置模型中的数据问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
感谢【上海先安科技】digitalsatori 老师的指点
问:
res.config.settings 是个瞬态的,会被定时清理。
在这里设置的东西,被清理后,这些配置数据是怎么生效的????
例如:在库存的设置中,我勾选了交货包裹这一项。一段时间后,这个res.config.settings被清理。清理后,我勾选的项依然有效,是什么原理?
还有,我能否拿到配置中的某个字段,根据这个字段,在我的代码中做一些判断。
谢谢
答:
好问题。
我们一般会继承res.config.settings
来定义一些配置信息。 而res.config.settings
是一个暂态模型(models.TransientModel
)并不能长久保存数据,那数据是保存在什么地方的呢?
简单回答,这些配置数据并不保存在同一个地方,很多设置的状态是通过动态判断来获得的。
实际上当我们定义一个一个如下的配置类:
class MyConfigWizard(models.TransientModel):_name = 'my.settings'_inherit = 'res.config.settings'default_foo = fields.type(..., default_model='my.model')group_bar = fields.Boolean(..., group='base.group_user',implied_group='my.group')module_baz = fields.Boolean(...)config_qux = fields.Char(..., config_parameter='my.parameter')other_field = fields.type(...)
可以看到配置类上的字段分以上5种类型, 也就是:
- 名字以
default_
开头,系统会根据设置的值来设置全局的ir.default
值 - 名字以
group_
开头,系统会根据设置的值来配置res.group
值 - 名字以
module_baz
, 系统会根据设置,安装或卸载baz模块 - 字段定义中包含
config_parameter
属性,系统将设置的值记录到ir.config_parameter
表中,其key为config_parameter
的值(上例中为:my.parameter
), value为本配置字段的值 - 其他字段,则需要继承
set_value
方法以设定存储的地点,而get_value
中设置获取值的方法
当打开配置界面时系统会自动调用res.config.settings
类的default_get
方法,而该方法定义了如何获取这5类字段的设置值的方法。
希望对你理解有帮助
举例:
from odoo import api, fields, modelsclass ResConfigSettings(models.TransientModel):_inherit = 'res.config.settings'group_stock_allow_negative_inventory = fields.Boolean("Allow Negative Inventory",implied_group='roke_stock.group_allow_negative_inventory') # 使用 group_allow_negative_inventory_enabled = self.user_has_groups('模块名.group_allow_negative_inventory')
这篇关于关于ODOO中配置模型中的数据问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!