原生的odoo在导入导出时,会有很多不方便,特别是处理 m2o多对一, o2m一对多, m2m多对多字段时会很麻烦,遇到名称重复就更不好处理了。
根据诸多项目的经验,我们做了导入导出的增强模块,对上述做了极大的增强,可以对上述关系字段,通过各种唯一编码进行导入导出。支持所有模型,支持所有唯一编码字段。支持增量更新,即数据存在则更新,没有则新建。完全满足了项目上线时一般数据初始化的工作。
应用已上架,官方市场下载:app_base_import_export
对于 o2m即form中的明细导入的支持需要使用专有模块: app_web_supero2m
以下进行操作举例,主要步骤如下:
- 通过导出功能生成模板,注意必填字段要包含,一般我们已经为必填字段设置了默认值,所以可以当报错时才处理
- 简单修改模板,一般是增加 "/关键字段", 如 "/ref", "/code", "/default_code",或 "/编码", "/参考"等,用字段名,或者字段标签即可。注意,为提高效率,只对索引字段进行处理,故在对象模型中,请确保关键字段 index=True
- m2m关系使用 "code1,code2"这样的 逗号 "," 分离
- 用生成的 excel文件导入,查看效果。
- 在详情表单 form中也可以直接这样处理,使用我们增强的 o2m一对多导入导出功能即可,注意只会导入此详情的数据。
- 注意事项,为保证数据准确,"/"成为了保留字,所以在name等关键字段或者定义中最好不要使用 "/",可以使用"|"代替。 另外为了方便m2o关系对应,实际的 "名称"最好不要重复。
比如我们实际业务中,一个尺码会属于多个尺码组,我们希望在尺码库中导入大量数据类似以下:
具体操作如下:
1. 通过导出功能生成模板
选中样例记录,导出。
如果想更新记录,那么勾选 “我想更新数据”,这时会将唯一"外部ID"字段导出,便于找到对应记录更新。
注意,有黑体下划线的是必填字段。可以“勾选新模板”将常用的导入方式加个命名,然后保存,供后续快速使用。
点击导出,即可导出一个命名为模型名的 excel文件。
2. 简单修改模板
我们可以直接改这个模板进行数据导入,只需要删除"外部ID"字段,就可以进行新增。
但这种对最用户来说并不友好,不符合每行一记录的操作习惯,也不能适用于相同名称的情况。 所以我们修改如下。
- 如果要更新数据,那么保留这个"外部ID"字段。我们现在是新增,所以要删除"外部ID"字段。
- 处理码制,作为m2o样例,改为 "码制|标准/关键唯一编码字段名,在此例中,是 "ref",一般odoo里会有"code"等这样的字段,在产品中,odoo会是 "default_code"字段,我们就用 "/default_code"即可。这个在开发者模式下很容易查看确定。
- 本例中,欧码对应是 "EU"
3.m2m关系使用 "code1,code2"这样的 逗号 "," 分离
处理尺码组,2行(或n行)改1行,每行中尺码组用 ","分隔,注意一定是半角符号 ","。 男鞋尺码组39-45对应 X003,女鞋尺码组35-40 对应 X004。
使用Excel的功能,我们快速来做3个尺码,对应的excel文件如下:
为符合国内习惯,也可以用中文,用关键字字段的中文描述,即将 ref换为编码,如下:
4. 用生成的 excel文件导入,查看效果。
选择导入的excel,操作导入
回到尺码库,我们可以看到数据导入完成。
至此操作结束,是不是很方便!
5. 处理最常见的一对多类型导入
在详情表单 form中也可以直接这样处理,使用我们增强的 o2m一对多导入导出功能即可,注意只会导入此详情的数据。
操作基本类似
6.按关键值采用更新模式的导入,可忽略错误
采用按第一列是唯一索引更新导入的模式,在导入文件中,第一列填入唯一编码,系统会自动按编码去搜索更需要更新的数据。系统中存在这个编码则更新编码下的所有字段。
7. 注意事项
为保证数据准确,"/"成为了保留字,所以在字段定义中不要使用 "/",可以使用"|"代替。 另外为了方便m2o关系对应,实际的 "名称"最好不要重复。