Odoo中文社区可以通过以下两个域名访问:shine-it.net , odoo.net.cn

由于系统升迁的原因,本论坛部分较早期的内容存在格式和链接损坏失效的问题,并非本论坛系统本身的缺陷,望谅解

本社区没有维护任何QQ群讨论组,任何与本社区同名的QQ群讨论组的言论与本社区无关!

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

关于ODOO中配置模型中的数据问题



  • 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类字段的设置值的方法。

    希望对你理解有帮助



  • @digitalsatori 万分感谢先安科技!


Log in to reply