引言
大多数Odoo 模块的定义,如用户界面和安全规则,实际是存储在对应数据表中的数据记录。模块中的 XML 和 CSV 文件不是 Odoo 应用运行时使用,而是载入数据表的手段。正是因为这个原因,Odoo 模块的一个重要部分是在文件中放入数据以在插件安装时将其载入数据库。
模块可以包含初始数据和演示数据,可通过数据文件将它们加入模块。此外,了解 Odoo 数据的格式对于在项目实施上下文中导入导出业务数据也非常重要。
本文的主要内容有:
- 理解外部标识符的概念
- 导入导出数据文件
- 使用 CSV 文件
- 添加模块数据
- 使用 XML 数据文件
理解外部标识符的概念
外部标识符,也称为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模块,将可以看到该模块生成的外部标识符:
![04a35c7380671bd957a648d0796231cb.png](https://img-blog.csdnimg.cn/img_convert/04a35c7380671bd957a648d0796231cb.png)
可以看到外部标识符有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,此处为85:
![4d3449cab7a74b6508f5639937266361.png](https://img-blog.csdnimg.cn/img_convert/4d3449cab7a74b6508f5639937266361.png)
除了作为其它应用引用记录的一种方式外,外部标识符还可以避免重复导入带来的重复数据。一旦外部标识符已存在,则会在原有记录上更新,避免了重复数据的新建。
查找外部标识符
在为我们的模块写入数据记录时,经常需要查找已有外部标识符来作引用。一种方式是访问菜单Settings > Technical > Sequences & Identifiers > External Identifiers,前面已经演示过。另一种方法是使用开发者菜单。在第一章 使用开发者模式快速入门 Odoo 12中介绍了如何激开发者模式。
要查找一个数据记录的外部标识符,我们应打开对应的表单视图,在开发者菜单中选择View Metadata选项。此时会显示一个带有记录数据库 ID 和外部标识符(也称作XML ID)的对话框。比如要查看 demo 用户 ID,需通过 Settings > Users & Companies > Users 进入用户表单视图,然后点击开发者工具菜单中的View Metadata选项。此时可以看到XML ID是base.user_demo,数据库 ID 是6:
![4f13733dea74ee1c0493d36ebb23c5a7.png](https://img-blog.csdnimg.cn/img_convert/4f13733dea74ee1c0493d36ebb23c5a7.png)
查看表单、列表、搜索或 action 视图中的外部标识符,都可以使用开发者菜单。下面我们通过Edit View选项来打开相应视图的详情表单。此时可以查看到External ID字段,其值即为外部标识符。例如在下图中,可以看到图书表单视图的External ID为library_app.view_form_book:
![a438c4b8ab4ee4233f9d17a50d8ba82c.png](https://img-blog.csdnimg.cn/img_convert/a438c4b8ab4ee4233f9d17a50d8ba82c.png)
导入导出 CSV 数据文件
导出数据文件并查看文件结构的简易方式是使用内置的导出功能。通过生成 CSV 文件,我们可以了解手动导入系统所需的格式,或编辑该文件批量导入,甚至是使用它生成我们插件模块的演示数据。
下面我们一起来学习从 Odoo 用户界面导入和导出的基础知识。
导出数据
数据导出是表单视图中的标准功能。要使用该功能, 需要勾选左侧的复选框来选择需导出的行,然后在上方的 Action 菜单中点击 Export 选项。首先我们要在图书应用中添加一些带有出版商和作者的图书。下例中我使用此前添加的书籍。
我们还需要安装 Contacts 应用,这样可以看到 Partner 的列表视图,可从该处导出记录。注意其默认视图为带有名片的看板视图,需要先切换为列表视图:
![cf93e496e7e09c498db76087d4d5900a.png](https://img-blog.csdnimg.cn/img_convert/cf93e496e7e09c498db76087d4d5900a.png)
可通过勾选列头的筛选框来选择所有匹配当前搜索条件的记录。
ℹ️Odoo 9中的修改
在 Odoo 更早的版本中,只有屏幕上显示(当页)的记录能被导出。Odoo 9做出了修改,勾选列头的复选框可导出当前过滤的所有匹配记录,而不仅仅是当前显示。这对导出屏幕上无法展示全的大量记录非常有用。
点击 Export 选项进入Export Data 对话表单,可选择导出方式。我们比较关注的是导出方式可以让我们通过手动或插件模块来导入该文件:
在对话表单最上方,有两个选项:
- What do you want do do?(老版本中为Export type),选择Import-Compatible Export选项,这样导出数据在以后导入时格式更友好。
- Export formats:可选择CSV或Excel,我们将选择 CSV 格式来更好理解原始导出格式,在很多表单应用中都能被读取。
下一步选取要导出的列,本例中简化操作,仅选择External ID和Name。如果我们点击Export To File按钮,就会下载带有导出数据的文件。最终的 CSV 内容类似:
"id