odoo-说明@ api.multi-记录集

时间:2018-11-16 09:49:43

标签: odoo recordset odoo-11

在odoo v11中,当我使用@ api.multi装饰器时,自变量是实际的记录集。但是该记录集中有哪些记录?

例如: 在odoo中,我单击一个伙伴。伙伴有一个计算字段。该计算字段的方法用@ api.multi装饰。在该记录集的第0位,有我想要的记录。但是为什么还有其他记录?

我知道@ api.one的作用-遍历记录集并将自变量重新定义为当前记录集。

我正面临这个问题,因为我想在单击合作伙伴时通过Navision的WebService调用填写字段。所以我定义了一个由方法计算的温度场。通过这种方法,我调用了Web服务并更新了我想显示的四个字段。

有什么解释/建议吗?

谢谢。 -JS

1 个答案:

答案 0 :(得分:0)

我不确定我会100%正确地解释您的问题。

根据{{​​3}},

自V9起,由于开发人员的常见错误解释,不推荐使用api.one()。 api.one()的后继者是通过使用api.multi()在该方法内,在需要时调用sure_one。

如果模型期望特定记录集中只有一个记录,请执行此操作

@api.multi
@api.depends('your_temp_field')
def _my_method(self):
    self.ensure_one() # self is a recordsets, if it contains more than 1 record, error will be raised.
    for record in self:
        record.field1 = 'value1'
        record.field2 = 'value2'
        record.field3 = 'value3'
        record.field4 = 'value4'

如果模型期望的记录超过一个,但是您需要修改特定的记录。
您可以简单地将一些if-else语句用于目标记录。
如果您只想要第0个位置,请使用索引字段作为条件。

请注意,索引的性能和大小也会增加数据库的开销,因为默认搜索/排序功能基于此。

您可以找到一个很好的例子ORM API V11 documentation