使用eval从另一个模块访问odoo字段

问题描述

有人可以帮助我了解此行的目的吗? 我看到它是指帐户中的一个字段,然后是模型account_move,然后是字段amount_total。

我正在尝试将此模块从v12移植到v13,但出现一个错误,提示amount_total不存在。 该模型中存在字段amount_total

<field name="ks_record_field" eval="ref('account.field_account_move__amount_total')" />

我要移植的模块中的原始字段是这个。

<field name="ks_record_field" eval="ref('account.field_account_invoice__amount_total')" />

解决方法

根据数据文件字段documentation

如果提供了ref属性,则其值必须为有效的external id,它将被查找并设置为该字段的值。
主要用于Many2oneReference字段。

eval属性仅评估提供的任何Python表达式并将结果设置为字段的值。
评估上下文包含各种模块(timedatetimetimedeltarelativedelta),解析external identifiersref)的功能和适用于当前字段的模型对象(obj)。

执行数据文件时,Odoo将尝试评估由eval属性指定的表达式,并调用xmlid_lookup,该表达式将返回(idres_model,{{ 1}})或提高res_id(如果找不到)。

ValueError字段外部标识符在数据库中不存在(未创建或删除)或已被修改。

,

除了@Kenly答案之外,odoo中的模型和字段信息也存储在数据库中,并且在odoo保存它们时,它们具有特殊的XML-ID结构,可用于快速检索它们。

  • 模型:前缀model_被带下划线的模型替换点的名称污染

     my.model.name --------->  model_my_model_name
    

您可以检查ir.model.access.csv我们一直在使用它。

  • 字段:前缀field_ name of the model + underscore + name of the field串联

      my_field_name ----->  field_my_model_name_my_field_name
    

当然,当您引用在另一个应用程序中创建的模型时,您需要像account.field_account_invoice__amount_total一样提供完整的XML-id,因为account.invoice是在account模块中定义的在较旧版本的Odoo中,您会收到此错误,因为在V13模型中,account.invoice被合并到account.move ref中将在数据库中查找该字段,但找不到该字段,因为存在不再有这样的模型。

希望对您有帮助。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...