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

How to update the values of `route_ids` through Web API in the `product.template` in Odoo/OpenERP 8?

使用 xmlrpc 连接到服务器并按照 here 的说明进行操作后,我尝试更改 route_ids 的值(采购 -> 供应Chain Information -> Routes) 所以三个选项中的 none (Manufacture, Buy, Make To Order) 被选中。

首先我取当前值:

>>> 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 时,我得到了相同的结果,即没有变化,一切正常。有什么想法吗?

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

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

文档指出:

One2many and Many2many use a special “commands” format to manipulate the set of records stored in/associated with the field.

This format is a list of triplets executed sequentially, where each triplet is a command to execute on the set of records. Not all commands apply in all situations.

我们感兴趣的删除记录:

(5, _, _)

removes all records from the set, equivalent to using the command 3 on every record explicitly. Can not be used on One2many. Can not be used in create().

所以我认为你应该改为:

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

希望对您有所帮助。