【问题标题】:Odoo - Why odoo store data of TransientModel like res.config.settings into ir.config_parameter?Odoo - 为什么 odoo 将 TransientModel 的数据(如 res.config.settings)存储到 ir.config_parameter 中?
【发布时间】:2019-11-22 11:51:53
【问题描述】:

res.config.settings模型是TransientModel,而TransientModel被设计用来存储临时数据,经过周期性的时间后会从数据库中移除数据。为了保存这些设置,我们必须实现ir.config_parameterset_paramget_param 方法。

所以,在这里我想知道为什么 odoo 使用ir.config_parameter 来存储这些设置值。为什么我们不能将res.config.settings 设为Model 而不是TransientModel 并将数据存储到该模型中。

【问题讨论】:

    标签: odoo-12


    【解决方案1】:

    我不是 odoo,所以我无法为他们回答,但我可以解释一下为什么我会考虑这种逻辑。

    在 odoo 中,您拥有传统的 MVC 范例,但有些地方您并没有真正的模型:您只需要一个视图和一个控制器。 odoo 中的向导就是这种情况。向导只是帮助用户以更简单的方式执行艰巨任务的帮助对话框。

    但是,如果他们没有模型,如何定义他们使用的数据?在哪里附加控制器逻辑?这将非常困难,并且需要在 odoo 中使用全新的编程范式,因此他们采用了更简单的解决方案:瞬态模型。

    所以在 odoo 中,瞬态模型基本上是一个向导。打开向导时会发生什么?

    1. Odoo 获取视图定义。
    2. 调用控制器获取默认数据(default_get())。
    3. 为您绘制了一个表格,但数据库中还没有记录。
    4. 您可以像往常一样更改表单,正常的计算和 onchange 方法开箱即用。
    5. 您点击了向导中的某个按钮,以执行任何操作。
    6. Odoo 在向导表中创建一条新记录。
    7. 与该按钮关联的方法在服务器中执行。

    下次打开向导时,它遵循相同的过程。正如您可以想象的那样,这会创建很多记录,因为向导记录总是只使用一次,所以有一个 cron 作业会不时删除这些垃圾。这就是为什么它们被称为“瞬态”。

    ir.config_parameter 的目的是存储和检索数据库范围的配置。 1 条记录 = 1 个参数。您可以在不使用向导的情况下创建参数。这些不是瞬态的,因此它是存储参数的合适位置。

    res.config.settings 的目的是帮助您配置系统,但这不仅仅是存储系统参数:它涉及配置身份验证方法,安装模块,为您提供邮件网关配置的快捷方式,在每个网站中安装主题,为每家公司选择会计科目表等。

    ir.config_parameter 中合并所有这些是没有意义的。

    【讨论】:

      猜你喜欢
      • 2020-09-30
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 2015-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多