【问题标题】:How to update the values of `route_ids` through Web API in the `product.template` in Odoo/OpenERP 8?如何在 Odoo/OpenERP 8 的 `product.template` 中通过 Web API 更新 `route_ids` 的值?
【发布时间】:2015-02-19 17:29:02
【问题描述】:

使用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 时,一切正常。有什么想法吗?

【问题讨论】:

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


    【解决方案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
    

    希望对您有所帮助。

    【讨论】:

    • 是的,就是这样。不过,您的答案中存在轻微的语法错误。为了删除所有条目:models.execute_kw(db, uid, password, 'product.template', 'write', [[id], {'route_ids': [(5, 0, 0)]}]) 为了添加一个条目,例如ID 为“1”:models.execute_kw(db, uid, password, 'product.template', 'write', [[id], {'route_ids': [(4, 1, 0)]}])
    • 其实我并没有真正看到我的回答和你的评论有什么不同。好吧,您使用元组而不是列表来传递 (5, 0, 0),但根据我的经验,两者的工作方式相同。
    • nvm,这是唯一的区别,实际上我只是检查了列表而不是元组,它也可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多