通过 Odoo XML-RPC API 和 false 检索模型字段

问题描述

我使用 Java XML-RPC 客户端成功地从“ir.models”及其字段“ir.model.fields”中检索到模型为 documented。但是,模型字段的 store 字段让我感到困惑。它通常是 false,例如对于模型 res.users 的字段,如 phoneemailzip 等,只有少数如 logincreate_date 将其设置为 {{ 1}}。这是故意的吗?我的意思是 - 根据 documentation - true 标记计算字段,但在通过 API 创建 store=false 记录时我仍然可以设置 email

另外,我想知道为什么未设置的字段值通过 XML-RPC 表示为 res.users。我无法将 falseboolean ttyped 字段值与其未设置值区分开来?

解决方法

那是因为您有一个有趣的 res.users 继承情况。

通过在模型定义中使用 _inherits = {'res.partner': 'partner_id'} 表示法,此模型具有嵌入的合作伙伴。在数据库中,您将有两个表:res_usersres_partner。它们之间的关系由表partner_id中的外键res_users建立。

但在 python 方面,这种继承将导致模型 res.users 也将包含 res.partner 模型的所有字段。 odoo 将模型 res.partner 记录的 res.users 字段标记为未存储,因为它们存储在另一个模型表中。

对于您的示例,logincreate_date 是真正的 res.users 字段,因此它们存储在 res_users 表中。但是 phoneemailzip 等等都是 res.partner 字段并存储在表 res_partner 中。