跳至内容

深入了解Odoo的模型注册:ir.model模型解析

一个完整的指南,介绍定义系统中每个 Odoo 模型的元数据模型
2026年3月11日
深入了解Odoo的模型注册:ir.model模型解析
Dasolo
| 还没有评论

介绍


在 Odoo 中,模型定义了数据在数据库中的结构和存储方式。您处理的每一条业务数据,从销售订单到发票再到联系人,都存在于一个模型中。


理解 Odoo 模型对开发者和功能顾问来说都是至关重要的。模型是 Odoo 数据架构的基础。它们定义了 Odoo 字段、关系和业务逻辑。


但是 Odoo 在系统中存储每个模型的信息在哪里呢?答案是 ir.model。这个模型在 Odoo 中是一个注册表,保存着关于所有其他模型的元数据。无论您是在构建自定义模块、探索 API 还是调试 Odoo,您都会遇到 ir.model。

什么是 ir.model 模型


ir.model模型是所有Odoo模型的元数据注册表。它在系统中为每个模型存储一条记录。当您在Python中定义一个新模型或通过Odoo Studio创建一个模型时,Odoo会创建或更新一个ir.model记录。


Odoo中的这个模型由基础模块使用。它是核心框架的一部分。每个Odoo模型,无论是常规模型、Odoo抽象模型还是Odoo瞬态模型,都有一个相应的ir.model条目。


该模型在基础模块中定义。它与ir.model.fields密切相关,后者存储每个模型上每个Odoo字段的元数据。ir.model和ir.model.fields共同构成了Odoo的自省和反射能力的基础。


开发人员在需要列出可用模型、检查模型继承或构建与任何模型一起使用的动态工具时使用ir.model。Odoo中的API模型通过XML-RPC和JSON-RPC公开ir.model。

模型中的关键字段


以下是ir.model模型中最重要的Odoo字段。理解这些将帮助您有效地使用模型注册表。


1. name

类型:Char。此字段存储模型的人类可读描述。它是可翻译的,并在技术设置和开发者工具中显示。它是您在浏览模型时看到的标签。


2. model

类型:Char。模型的技术名称。这是您在Python代码中使用的字符串,例如res.partner或sale.order。它是必需的,并且为快速查找而建立索引。


3. info

类型:Text。关于模型的附加信息或备注。用于文档和内部使用。对于大多数模型可以为空。


4. state

类型:选择。指示模型是基础(来自Odoo模块)还是手动(通过Odoo Studio或自定义代码创建)。基础模型是受保护的。手动模型可以更自由地修改。


5. 瞬态

类型:布尔值。当为True时,此模型是Odoo瞬态模型。瞬态模型是临时的。它们的记录会自动清理。用于向导和临时数据。


6. field_id

类型:一对多(ir.model.fields)。在此模型上定义的Odoo字段列表。每个ir.model.fields记录描述一个字段:其名称、类型和其他属性。


7. access_ids

类型:一对多(ir.model.access)。此模型的访问权限。每条记录定义哪些组可以创建、读取、更新或删除记录。用于安全性。


8. rule_ids

类型:一对多(ir.rule)。此模型的记录规则。记录规则限制用户可以看到哪些记录。用于行级安全性。


9. inherited_model_ids

类型:多对多(ir.model)。使用Odoo模型继承时的父模型。当您在Odoo中继承一个模型时,子模型在此处链接到其父模型。这就是Odoo继承模型的工作原理。


10. modules

类型:字符。一个计算字段,列出定义此模型的模块。对于由多个模块扩展的模型,这里会显示所有模块。对于理解依赖关系非常有用。


11. 排序

类型:整数。技术设置菜单中模型的显示顺序。较低的值优先显示。用于组织模型列表。


12. 约束

类型:文本。Python 约束定义。存储 @api.constrains 装饰器的代码。用于模型具有自定义验证逻辑时。


13. 后约束

类型:文本。Python 后约束定义。类似于约束,但用于后验证。用于高级验证场景。


14. sql_约束

类型:文本。SQL 约束定义。数据库级别的约束,如唯一索引。确保数据库级别的数据完整性。


15. 视图 ID

类型:一对多(ir.ui.view)。计算字段,列出与此模型相关的视图。用于反射和视图管理。


16. 记录计数

类型:整数。计算字段,显示此模型中的记录数量。对于报告和理解模型所持有的数据量非常有用。


17. display_name

类型:字符。计算字段,用于显示表示。当记录在列表和关系中显示时使用。通常结合名称和模型。


18. create_date

类型:日期时间。存储记录创建的日期和时间。由Odoo自动管理。


19. create_uid

类型:多对一(res.users)。创建记录的用户。用于审计和跟踪。


20. write_date

类型:日期时间。存储最后修改的日期和时间。同样由系统自动管理。


21. write_uid

类型:多对一(res.users)。最后修改记录的用户。用于审计。


22. active

类型:布尔值。软删除标志。当为 False 时,记录被归档。用于已弃用的模型。


23. id

类型:整数。数据库 ID。每个 ir.model 记录的唯一标识符。在 API 调用中引用模型时使用。


24. restrict_functionality

类型:布尔值。当为 True 时,该模型在某些 Odoo 版本中功能受限。用于区分企业版与社区版。


25. is_mail_thread

类型:布尔值。指示该模型是否为邮件线程。邮件线程模型具有聊天、消息和关注者。用于支持讨论的模型。


26. is_mail_activity

类型:布尔值。指示该模型是否支持活动。活动模型具有活动规划器和下一步行动跟踪。

该模型在业务工作流程中的使用


1. 技术设置和配置

管理员使用技术设置菜单浏览模型。ir.model 记录定义了该列表中显示的内容。每个模型显示其名称、描述和字段计数。


2. 访问权限管理

在配置安全性时,管理员将访问权限分配给组。ir.model 上的 access_ids 定义了哪些组可以创建、读取、更新或删除每个模型的记录。


3. Odoo Studio 自定义

当用户在 Odoo Studio 中创建自定义模型时,Odoo 会创建新的 ir.model 记录,状态为手动。field_id 关系被填充为自定义的 Odoo 字段。


4. API 和集成发现

外部系统通过 XML-RPC 或 JSON-RPC API 与 Odoo 集成。它们可以查询 ir.model 以发现可用模型及其结构。Odoo 中的 API 模型为此提供了内部检查。


5. 模块开发和调试

开发人员在构建模块时使用 ir.model。他们检查 inherited_model_ids 以了解 Odoo 模型继承。他们检查 field_id 以查看模型上的所有 Odoo 字段。

开发者如何扩展该模型


开发人员很少直接扩展 ir.model。相反,他们在定义新模型时与其合作。加载模块时,模型注册表会自动更新。


模型继承

当您在 Python 中使用 _inherit = 'res.partner' 时,Odoo 会更新 res.partner 的 ir.model 记录。新模型的 ir.model 记录上的 inherited_model_ids 将链接到父模型。这就是 Odoo 模型继承的工作原理。Odoo 中的继承模型保持注册表同步。


添加字段

当您向模型添加新的 Odoo 字段时,Odoo 会创建 ir.model.fields 记录。这些记录通过 model_id 字段链接到 ir.model。ir.model 记录本身不会被修改。


Python 扩展

您通常不会重写 ir.model 方法。该模型是核心框架的一部分。如果您需要自定义行为,请扩展 ir.model 描述的模型,而不是 ir.model 本身。


Odoo Studio

Odoo Studio 在您构建自定义模型时会创建 ir.model 和 ir.model.fields 记录。无需代码。transient 标志将 Odoo 瞬态模型与常规模型区分开。抽象模型(Odoo 抽象模型)不会创建 ir.model 记录,因为它们没有数据库表。

最佳实践


  • 使用 ir.model 进行自省和发现。在构建集成时,查询 ir.model 列出可用模型,而不是硬编码。
  • 使用模型字段进行查找。它是被索引的。当您需要特定模型的元数据时,通过模型名称进行搜索。
  • 在构建自定义模块时检查 inherited_model_ids。在扩展之前了解继承链。
  • 使用 Odoo 中的 API 模型(XML-RPC 或 JSON-RPC)读取 ir.model。除非您正在构建类似 Studio 的工具,否则避免修改它。
  • 使用 ir.model.fields 进行字段级自省。field_id 关系为您提供模型上的所有 Odoo 字段。

常见错误


  • 直接修改 ir.model 记录。注册表由 Odoo 管理。更改可能会破坏系统或在升级时被覆盖。
  • 将 ir.model 与 Python 模型类混淆。ir.model 是数据库记录。Python 类是实际模型。它们相关但不同。
  • 假设所有模型都有 ir.model 记录。Odoo 抽象模型类不会创建数据库表或 ir.model 记录。
  • 忘记了临时模型是暂时的。临时标志意味着Odoo临时模型数据会被清理。请勿将其用于永久数据。
  • 查询ir.model时未进行过滤。一个典型的Odoo实例有数百个模型。始终按模型名称过滤或使用搜索域。

结论


ir.model模型是所有Odoo模型的注册表。它存储系统中每个模型的元数据。理解其字段以及它与ir.model.fields的关系将帮助您导航Odoo数据架构。


无论您是探索技术设置的功能顾问,还是构建API集成的开发人员,扎实掌握ir.model将节省时间并防止错误。

需要帮助进行 Odoo 实施吗?


Dasolo帮助公司实施、定制和优化Odoo。我们专注于API集成和Odoo开发。我们的团队在Odoo数据架构和像ir.model这样的模型方面拥有深厚的经验。


如果您需要Odoo实施、自定义模块或集成方面的帮助,我们随时为您提供帮助。 预约演示 以讨论您的项目。

深入了解Odoo的模型注册:ir.model模型解析
Dasolo 2026年3月11日
分析这篇文章
登录 留下评论