在odoo v11中,当我使用@ api.multi装饰器时,自变量是实际的记录集。但是该记录集中有哪些记录?
例如: 在odoo中,我单击一个伙伴。伙伴有一个计算字段。该计算字段的方法用@ api.multi装饰。在该记录集的第0位,有我想要的记录。但是为什么还有其他记录?
我知道@ api.one的作用-遍历记录集并将自变量重新定义为当前记录集。
我正面临这个问题,因为我想在单击合作伙伴时通过Navision的WebService调用填写字段。所以我定义了一个由方法计算的温度场。通过这种方法,我调用了Web服务并更新了我想显示的四个字段。
有什么解释/建议吗?
谢谢。 -JS
答案 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。