Odoo Web服务API用于创建包含3个项目的销售订单记录

时间:2017-06-20 02:58:20

标签: web-services odoo-10

我一直在努力创建一个包含3个商品的销售订单记录,但却无法创建。 但是我可以成功创建一个包含1个项目的记录。不知道如何添加多个项目,尝试了各种情况 以下代码帮我创建了一个包含1个项目的记录

line_vals = {
    'product_id': product2_ids[0].get('id'),
    'name':'test',
    'product_uom_qty': 10,
    'price_unit': 30000,
}

order_vals = {
    'partner_id': customer_ids[0].get('id'),
    'validity_date': datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S'),
    'order_line': [(0, 0, line_vals)],
}

salesorder = objects.execute_kw(db, uid, pwd, 'sale.order', 'create', [order_vals])

尝试为许多项目更改此代码,它只能创建一个或失败。 有什么建议?

1 个答案:

答案 0 :(得分:0)

通常您可以通过两种方式管理 One2many 字段,或者您可以在反向模型中编写 many2one reference ,因此框架将自动管理one2many或者您可以准备元组列表和用它的父记录直接写one2many字段。

我们以帐户发票和发票行为例。因此,如果您要创建发票行,那么您有两个可能的选项:首先创建account.invoice记录,然后在准备数据时在所有发票行中提供该发票参考,或者其他方式是准备帐户发票数据,并且还准备发票行数据(元组列表)并将其传递给account.invoice

这里使用第二种方式。

(0,0,{values}):链接到需要使用给定值字典创建的新记录。

如果订单有多个订单行,那么您可以创建元组列表,如 [(0,0,{values}),(0,0,{values}),(0,0,{values} )]

您应该按照以下代码以相同的顺序创建多行

order_lines=[]

for product in products:
    line_vals = {
        'product_id': product.id,
        'name':'product.name,
        'product_uom_qty': product.product_uom_qty,
        'price_unit': product.price_unit,
    }
    order_lines.append((0, 0,line_vals))

order_vals = {
    'partner_id': customer_ids[0].get('id'),
    'validity_date': datetime.datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S'),
    'order_line':order_lines,
}

salesorder = objects.execute_kw(db, uid, pwd, 'sale.order', 'create', [order_vals])

这可能会对你有帮助。