Odoo模块开发教程6-导入导出 CSV 数据文件第二讲

导入数据

首先应确认开启了导入功能,默认是开启的。如果没有,进入 Settings > General Settings,在 Users 版块下勾选 Import & Export 选项即可。启用该选项后,列表视图上方 Create 按钮旁就会显示一个 Import 按钮。
“ 注意: Import & Export 设置安装 base_import 模块,该模块用于提供这一功能。 ”下面我们尝试批量编辑 Contact 或 Partner 数据。使用电子表单或文本编辑器打开 CSV 并修改几个值。将 id 栏留空即可新增行。前文已经提到第一列 id 作为每行的唯一标识符,这让已有记录可以被更新,而不会因重新导入数据重复创建。我们在导出表中编辑任意字段在导入时对应记录就会被更新。
对于要加入 CSV 文件的新行,我们可以自己添加外部标识符或将 id 列留空。两种方式都会创建新的记录。作为示例,我们添加一行 id 留空、 name 为 Phillip K. Dick,来在数据库中新建这一记录。在 CSV 文件中进行保存,点击 Import(Create 按钮旁),然后点击 Load File 按钮选择磁盘中 CSV 的路径就出会出现如下导入助手。点击右上角的 Test Import 按钮,检查数据正确性。由于导入的文件是在 Odoo 中导出文件基
础上修改的,正常会有效并且各列会自动与数据库中对应字段匹配。因编辑所使用的软件各异,有可能需对分隔符和编码进行处理。现在可以点击 Import 按钮,修改和新建记录就会被载入到Odoo 中。

CSV 数据文件中的关联记录

前面的示例非常简单,一旦我们开使用关联多张表的关联字段时,数据文件就会变得更为复杂。我们处理过图书中的 Partner 记录,下面就看一下如何在图书 CSV 文件中表示对这些 Partner
的引用。具体来说,有一个出版商(publisher_id 字段)的 many-to-one(或外键)关联,以及一个作者(author_ids 字段)的 many-to-many 关联。
CSV 文件的表头行中关联列应在名称后添加一个/id。它将使用外部标识符来引用关联记录。本例中,我们将在 publisher_id/id 字段中加载图书出版商,使用关联 Partner 的外部 ID 作为其值。
“ 注意: 可使用/.id 来进行替代来使用数据库中的真实 ID(自动分配的数字 id),但极少使用到。除非有特别原因,否则请使用外部 ID 而非数据库 ID。同时要记住数据库 ID 针对具体的数
据库,所以如果导入到非原始数据库中这种操作大多数情况下都会失败。 ”CSV 数据文件中也可导入 many-to-many 字段,这和添加带双引号并由逗号分隔的外部 ID 列表一样简单。例如,要载入图书作者,将需要一个 author_ids/id 列,并使用一个关联 Partner 外部 ID 的逗号分隔列表作为其值:
One-to-many 字段通常是表头和行或父子关系,对于这类关系有特别的支持方式:对于同一条父记录可以有多个关联行。此处我们在 Partner 模型中有一个 one-to-many 字段的例子:公司可带有多个联系人。如果从 Partner 模型中导出数据并包含 Contacts/Name 字段,就可以看到要导入此类型数据的格式(Contacts 中选择 Azure Interior:默认应为第一条,并执行前述的导出步骤):
id 和 name 列为父记录的, child_ids 两列为子记录的。注意第一行记录以下父记录部分留空。上表中 CSV 文件形式显示为:
"id","name","child_ids/id","child_ids/name"
"base.res_partner_12","Azure Interior","base.res_partner_address_15","Brandon
Freeman"
"","","base.res_partner_address_28","Colleen Diaz"
"","","base.res_partner_address_16","Nicole Ford"
可以看到 id 和 name 这两列第一行有值,后两行都为空。其中的父记录为联系人的公司信息。另两行的前缀都是 child_ids/并且在三行中都有数据。这些是父公司的联系人信息。第一行包含公司和第一个联系人,其余行仅包含联系人这一子信息。

更多教程:https://www.erpdaxue.cn/odoo/odoo-teach/odoo12-teach/

上一篇:2020 BIT冬训-二分三分快速幂矩阵 B - Error Curves HDU - 3714


下一篇:MacOS too many open files