我正在使用 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)。第一个必须有三列( idnameproduct_code )。第二个也必须有三列( idnameproducts/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_codename 列,然后继续。例如,将生成的 CSV 文件另存为 Products.csv。打开它,您将看到导出产品的所有 XML ID(如果它们没有 XML ID,则导出后他们会做 - 如果没有任何人,导出会为每个导出的记录生成 XML ID -) .现在,我猜客户已经给了您类似的文件,其中包含订单行名称、产品代码列,因此将产品代码列值替换为您刚刚导出的产品的相应 XML ID。所以最后你应该有一个文件要导入,OrderLine.csv,包含 idnameproducts/id 列。

案例 3 : 有一些属于现有产品的产品代码存储在数据库中,还有一些不存在

在这种情况下,您必须将案例 1 和案例 2 结合起来,首先,按照案例 2 中的描述导出产品,然后使用代码尚不存在的产品创建一个新产品,如案例 1 中所述。然后将客户提供给您的产品代码替换为案例 2 中所述的相应代码。

注意 :如果您有数千条记录要导入并手动替换它们,则此过程将为您提供大量时间。在这种情况下,必须在 CSV 编辑器中创建一个宏来进行替换(通过搜索和替换)。例如,使用 LibreOffice,您可以使用 Python 执行宏。



编辑

我认为最好浪费一点时间为您的 CSV 编辑器(Excel、LibreOffice、Open Office 或其他)编写宏,但是如果您感到绝望并且只需要通过 Odoo 来完成此操作,我想有一个糟糕的解决方法,但至少,它也应该有效。

1.在Char模型中新建一个名为product_codeorder_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/

10-16 09:31