我正在使用 odoo 10,我有两个模型 Order_Line 和 Products。
订单行
class OrderLine(models.Model):
_name = 'order_line'
_description = 'Order Lines'
name = fields.Char()
products = fields.Many2one('amgl.products', String='Products')
产品
class Products(models.Model):
_name = 'products'
_description = 'Products'
_sql_constraints = [
('uniq_poduct_code', 'unique(product_code)', 'Product Code already exists!')
]
name = fields.Char()
product_code = Char()
现在我正在尝试从 csv 文件创建 order_line,并且在 csv 文件中,客户向我提供“产品代码”而不是
Id
。如何处理这个,我们使用产品代码,系统自动填充与该产品代码关联的产品。注意:
products 表中的
Product Code
也是唯一的,所以没有重复的机会。CSV 模板:
customer/account_number,customer/first_name,customer/last_name,customer/account_type,order/transaction_id,order/products/product_code,order/quantity,order/customer_id/id
最佳答案
案例 1 :数据库中没有存储有客户提供给您的任何产品代码的产品
如果尚未在数据库中创建产品代码,您应该有两个 CSV 文件(Products.csv 和 OrderLine.csv)。第一个必须有三列( id
、 name
和 product_code
)。第二个也必须有三列( id
、 name
和 products/id
)。因此,您只需在 Products.csv 的 id
列下创建一个 XML ID,并从文件 OrderLine.csv 的 products/id
列的相应行调用此 XML ID。
Case 2 : 客户给你的产品代码属于数据库中已有的产品
现在,客户为您提供了数据库中已经存在的产品的产品代码。在这种情况下,您不必创建 Products.csv 文件。您需要知道哪些产品的 XML ID 具有客户提供给您的产品代码。为此,您可以通过 Odoo 的界面进入模型 products
的树 View (如果此 View 不存在,则必须创建它)。然后,您必须选择所有记录(如果需要,请单击右上角的数字 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 执行宏。
编辑
我认为最好浪费一点时间为您的 CSV 编辑器(Excel、LibreOffice、Open Office 或其他)编写宏,但是如果您感到绝望并且只需要通过 Odoo 来完成此操作,我想有一个糟糕的解决方法,但至少,它也应该有效。
1.在Char
模型中新建一个名为product_code
的order_line
字段(它会暂时存在)。
2.修改该模型的ORM create方法:
@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 create方法。导入后,您将在数据库中拥有与产品正确相关的订单行。
完成后,您必须记住删除您添加的代码(并从数据库中的
product_code
模型中删除列 order_line
,以删除垃圾)。关于mysql - Odoo - 使用代码而不是 id 搜索产品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47753249/