([自动操作] Odoo问题与write()和for循环一起使用

问题描述 投票:1回答:1

我正在尝试使用自动操作来更新模型'product.supplierinfo'中的'sequence'值,以便从采购订单更新供应商的价格时,将优先考虑该供应商以计算补货成本。为此,新的/更新的记录必须获得该产品的最低“序列”值。

Automated Action Screenshoot

自动操作设置:型号:product.supplierinfo行动:执行Python代码条件:创建和更新

py的这一部分成功重置了从2开始的序列:

val = 1
registers = model.search([('product_tmpl_id','=',record.product_tmpl_id.id)], order = "sequence asc")
for reg in registers:
  val = val + 1
  reg['sequence'] = val

并且这另一个成功地给更新/换行的序列值1:

record.write({'sequence': 1})

但是,当全部放在一起时,所有行都得到序列1:

val = 1
registers = model.search([('product_tmpl_id','=',record.product_tmpl_id.id)], order = "sequence asc")
for reg in registers:
  val = val + 1
  reg['sequence'] = val
record.write({'sequence': 1})

[我是一个非常菜鸟,我什至以为循环可能不会以缩进结尾,并尝试了另一个循环以证明我丢失了某些东西(首先将序列1设置为目标记录,然后将该记录从搜索方法)。在所有寄存器的序列值上仍为1:

record.write({'sequence': 1})
val = 1
registers = model.search([('product_tmpl_id','=',record.product_tmpl_id.id),('id','!=', record.id)], order = "sequence asc")
for reg in registers:
  val = val + 1
  reg['sequence'] = val

有人知道为什么不将触发记录的顺序设置为1,然后将其余顺序从2开始设置吗?

python odoo odoo-11
1个回答
0
投票

[@ CZoellner的帮助下,我们发现我的代码正在创建一个遍历所有记录的循环,在编辑序列值时,它将再次触发自动操作。由于某种原因,它不会引发无限循环错误。

© www.soinside.com 2019 - 2024. All rights reserved.