Odoo模块开发教程5-导入、导出以及模块数据第一讲
模块继承之修改视图和数据总结
大多数 Odoo 模块的定义,如用户界面和安全规则,实际是存储在对应数据表中的数据记录。
模块中的 XML 和 CSV 文件不是 Odoo 应用运行时使用,而是载入数据表的手段。正是因为这个原因, Odoo 模块的一个重要部分是在文件中放入数据以在插件安装时将其载入数据库。
模块可以包含初始数据和演示数据,可通过数据文件将它们加入模块。此外,了解 Odoo 数据的格式对于在项目实施上下文中导入导出业务数据也非常重要。
本文的主要内容有:
⚫ 理解外部标识符的概念
⚫ 导入导出数据文件
⚫ 使用 CSV 文件
⚫ 添加模块数据
⚫ 使用 XML 数据文件
开发准备
本文要求读者可以运行 Odoo 服务并已安装前面我们此前开发的图书应用。相关代码请见
GitHub 仓库。你可能也同时安装了第四章模块继承中创建的 library_member 模块,但本文并不要求使用该模型。
理解外部标识符的概念
外部标识符,也称为 XML ID,是用于唯一标识 Odoo 中特定记录的有可读性的字符串标识符。在 Odoo 中加载数据时它们就很重要了,这样可以对已有数据记录进行修改或在其它数据记录中引用它。
首先我们将讨论外部标识符的工作原理以及如何对其进行检查。然后我们会学习如何使用网页客户端来查找指定数据记录的外部标识符,在创建插件模块或继承已有模块时需要经常用到。
外部标识符的工作原理
记录在数据库中的真实标识符是自动分配的序列号,在安装模块时没法预先知道将要分配的具体ID 的。外部标识符让我们无需知道真实的数据库 ID 便可以引用一条相关记录。 XML ID 为数据库ID 提供了一个方便的别名,藉于此我们可以在任何时刻引用某一指定记录。
Odoo 模块数据文件中使用 XML ID 来定义记录。其中一个原因是避免在升级模块时创建重复的记录,在升级时会再次将数据文件加载到数据库中。我们要检测已有记录来进行更新,而不是重复创建记录。另一个原因是使用 XML ID 来支持交叉数据:即需引用其它数据记录的数据记录。因
为我们无法知道真实数据库 ID,使用 XML ID 来由 Odoo 框架来进行相应的转换。Odoo 处理由外部标识符向所分配的真实数据库 ID 的转换。背后的机制相当简单: Odoo 维护一张外部标识符和对应数据库 ID 的映射表: ir.model.data model。
我们需启用开发者模式才能访问下文中的菜单。可通过在右上角头像左侧查看是否有调试图标,如果没有需在 Settings 菜单页启用,具体方法可参照第一章使用开发者模式快速入门 Odoo 12中的内容。
通过菜单访问 Settings > Technical > Sequences & Identifiers > External Identifiers 可查看已有映射。例如访问外部标识符列表并过滤出 library_app 模块,将可以看到该模块生成的外部标识符.
可以看到外部标识符有 Complete ID 标签。注意其组成部分为:模块名+.+标识符名,如library_app.action_library_book。外部标识符仅需在 Odoo 模块内唯一,两个模块中使用相同标识符不会产生冲突。全局唯一标识符是由模块名和外部标识符共同组成的,在上图 Complete ID 项中可以看到。在数据文件中使用外部标识符,我们可以选择完整的标识符或仅外部标识符部分。通常仅使用外
部标识符会更简单,但使用完整标识符时我们可以引用其它模块中的数据记录。做引用时不要忘记在模块依赖中加入这些模块以确保在我们的记录之前加载这些记录。
“ 小贴士: 有时即便引用相同模块中的 XML ID 也需使用完整标识符”在上图列表最上方可以看到library_app.action_library_book 完整标识符。这是我们在模块中创建的菜单操作,在相应的菜单项中引用。点击进入表单视图查看详情。图中可以看出library_app 模块中的 action_library_book 外部标识符映射到 ir.actions.act_window 模型中的记
录 ID,此处为 80:除了作为其它应用引用记录的一种方式外,外部标识符还可以避免重复导入带来的重复数据。一
旦外部标识符已存在,则会在原有记录上更新,避免了重复数据的新建。
查找外部标识符
在为我们的模块写入数据记录时,经常需要查找已有外部标识符来作引用。一种方式是访问菜单
Settings > Technical > Sequences & Identifiers > External Identifiers,前面已经演示过。另一种方法是使用开发者菜单。在第一章 使用开发者模式快速入门 Odoo 12 中介绍了如何激开发者模式。
要查找一个数据记录的外部标识符,我们应打开对应的表单视图,在开发者菜单中选择 ViewMetadata 选项。此时会显示一个带有记录数据库 ID 和外部标识符(也称作 XML ID)的对话框。比如要查看 demo 用户 ID,需通过 Settings > Users & Companies > Users 进入用户表单视图,然后点击开发者工具菜单中的 View Metadata 选项。此时可以看到 XML ID 是base.user_demo,数据库 ID 是 6:查看表单、列表、搜索或 action 视图中的外部标识符,都可以使用开发者菜单。下面我们通过Edit View 选项来打开相应视图的详情表单。此时可以查看到 External ID 字段,其值即为外部标识符。例如在下图中,可以看到图书表单视图的 External ID 为 library_app.view_form_book