问题描述
有人可以帮助我了解此行的目的吗? 我看到它是指帐户中的一个字段,然后是模型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,它将被查找并设置为该字段的值。
主要用于Many2one和Reference字段。
eval
属性仅评估提供的任何Python表达式并将结果设置为字段的值。
评估上下文包含各种模块(time
,datetime
,timedelta
,relativedelta
),解析external identifiers(ref
)的功能和适用于当前字段的模型对象(obj
)。
执行数据文件时,Odoo将尝试评估由eval
属性指定的表达式,并调用xmlid_lookup
,该表达式将返回(id
,res_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
中将在数据库中查找该字段,但找不到该字段,因为存在不再有这样的模型。
希望对您有帮助。