抛砖:
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类字段的设置值的方法。
============================================================================================================================