如何在Odoo / OpenERP 8的`product.template`中通过Web API更新`route_ids`的值?

时间:2015-02-19 17:29:03

标签: postgresql openerp xml-rpc odoo openerp-8

使用xmlrpc连接到服务器并按照here的说明操作后,我尝试更改route_ids的值(采购 - >供应链信息 - >路线)因此,未选择三个选项(制造,购买,按订单生产)。

首先我采用当前值:

>>> models.execute_kw(db, uid, password,
...     'product.template', 'read',
...     [125], {'fields': ['route_ids']})
{'route_ids': [5, 6, 1], 'id': 125}

然后我尝试更新值:

>>> models.execute_kw(db, uid, password, 'product.template', 'write', 
...     [[125], {'route_ids': []}])    
True

最后,我检查值是否已更新:

>>> models.execute_kw(db, uid, password,
...     'product.template', 'read',
...     [125], {'fields': ['route_ids']})
{'route_ids': [5, 6, 1], 'id': 125}

知道为什么这不起作用?当我尝试更改display_name时,我得到了相同的结果,即没有变化,但是当我尝试更改weight_net时,一切正常。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您查看了有关write方法here的文档,您就会明白为什么它不起作用。 实际上,您提供的页面确实引用了there

所以我认为您遇到的问题是您正在尝试清空route_ids,并为其分配一个空列表。

文档说明:

  

One2many和Many2many使用特殊的“命令”格式来操纵存储在该字段中/与该字段相关联的记录集。

     

此格式是按顺序执行的三元组列表,其中每个三元组是在记录集上执行的命令。并非所有命令都适用于所有情况。

我们有兴趣删除记录:

  

(5,_,_)

     

从集合中删除所有记录,相当于在每条记录上明确使用命令3。不能在One2many上使用。不能在create()中使用。

所以我认为你应该写一下:

>>> models.execute_kw(db, uid, password, 'product.template', 
                        'write', [[125], {'route_ids': [[5, 0, 0]]}])    
True

希望它有所帮助。