案例 1:数据库中没有存储客户提供给您的任何产品代码的产品
如果尚未在数据库中创建产品代码,您应该有两个 CSV 文件(Products.csv 和 OrderLine.csv)。第一个必须包含三列(id、name 和 product_code)。第二个也必须有三列(id、name 和 products/id)。因此,您只需在 Products.csv 的 id 列下创建一个 XML ID,并从文件 OrderLine 的 products/id 列的相应行调用此 XML ID .csv.
案例2:客户给你的产品代码属于数据库中已有的产品
现在,客户已经为您提供了数据库中已经存在的产品的产品代码。在这种情况下,您不必创建 Products.csv 文件。您需要知道哪些产品的 XML ID 具有客户提供给您的产品代码。为此,您可以通过 Odoo 的界面进入模型products 的树视图(如果此视图不存在,则必须创建它)。然后,您必须选择所有记录(如果需要,请单击右上角的数字 80 以显示每页的更多记录)。选择所有这些后,单击More 按钮,然后单击Export。选择列product_code 和name 然后继续。例如,将生成的 CSV 文件另存为 Products.csv。打开它,您将看到导出产品的所有 XML ID(如果它们没有 XML ID,则在导出后他们会执行 - 如果没有任何人,导出会为每个导出记录生成 XML ID -) .现在,我猜客户已经给了您类似文件的内容,其中包含 订单行的名称、产品代码,因此请替换 产品代码列值与您刚刚导出的产品的相应 XML ID。所以最后你应该有一个文件要导入,OrderLine.csv,包含id、name 和products/id 列。
案例3:数据库中存储了一些属于现有产品的产品代码,还有一些仍然不存在的产品代码
在这种情况下,您必须将案例 1 和 2 结合起来,首先,按照案例 2 中的描述导出产品,然后使用代码尚不存在的产品创建一个新产品,如案例中所述1.然后将客户提供给您的产品代码替换为案例2中描述的相应产品代码。
注意:如果您要导入数千条记录并手动替换它们,此过程将为您提供大量时间。在这种情况下,必须在 CSV 编辑器中创建一个宏来进行替换(搜索和替换)。例如,使用 LibreOffice,您可以使用 Python 执行宏。
示例(案例 3)
客户给了你一个订单行文件,有两行:
- 名称:OL A,产品代码:AAA
- 名称:OL B,产品代码:BBB
您从 Odoo 界面导出产品并获得一个文件
行:
id,name,product_code
__export__.products_a,"Product A","AAA"
您在两个文件中寻找产品代码的重合,并且
在客户文件的副本中进行替换,所以现在你有了
这个:
- 姓名:OL A,产品编号:
__export__.products_a
- 名称:OL B,产品代码:BBB
然后您创建一个新的 CSV Products.csv 并将产品放入其中
其产品代码尚不存在:
id,name,product_code
__import__.products_b,"Product B","BBB"
现在再次应用替换,将这个新文件与之前的文件进行比较
我们有,你会得到这个:
- 姓名:OL A,产品编号:
__export__.products_a
- 姓名:OL B,产品编号:
__import__.products_b
将此文件转换为适用于 Odoo 的正确 CSV 格式,并将其另存为
OrderLine.csv:
id,name,products/id
__import__.order_line_1,"OL A",__export__.products_a
__import__.order_line_2,"OL B",__import__.products_b
最后,导入文件,并考虑:导入
Products.csv 在 OrderLine.csv 之前。
编辑
我认为最好花点时间为 CSV 编辑器(Excel、LibreOffice、Open Office 或其他)编写宏,但如果您迫不及待,只需要通过 Odoo 进行此操作,我想出了一个糟糕的解决方法,但至少它应该也可以工作。
1.在order_line 模型中创建一个名为product_code 的新Char 字段(它会暂时存在)。
2.修改本模型的ORM创建方法:
@api.model
def create(self, vals):
product_id = False
product_code = vals.get('product_code', False)
if product_code:
product = self.env['products'].search([
('product_code', '=', product_code)
])
if product:
product_id = product[0].id
vals.update({
'products': product_id,
})
return super(OrderLine, self).create(vals)
3.复制客户发给你的文件,正确重命名标题,将order/products/product_code列重命名为product_code。导入 CSV 文件。每次导入记录都会调用order_line模型的ORM创建方法。
导入后,您将在数据库中获得与产品正确相关的订单行。
完成后,您必须记住删除已添加的代码(还要从数据库中的 order_line 模型中删除列 product_code,以删除垃圾)。