【发布时间】:2021-08-08 12:42:16
【问题描述】:
我想在写入 stock.quant 时触发操作,即当产品的总库存发生变化时。我目前的做法是这样的:
class StockQuantInherit(models.Model):
_inherit = "stock.quant"
def write(self, vals):
res = super(StockQuantInherit, self).write(vals)
available = self.product_id.product_tmpl_id.mapped('virtual_available')[0]
log(available) # see result below
api_call_to_external_site(self.product_id.default_code, available)
return res
当产品的库存发生变化时,会导致 stock.quant 被写入 3 次,如下所示。 (它显示为错误,所以我可以很容易地在信息流中发现它)
2021-08-08 12:25:44,278 11335 ERROR odoo odoo.addons.stock_enhanced.models.stock_move: 87.0
2021-08-08 12:25:44,281 11335 ERROR odoo odoo.addons.stock_enhanced.models.stock_move: 87.0
2021-08-08 12:25:44,299 11335 ERROR odoo odoo.addons.stock_enhanced.models.stock_move: 96.0
或者它也可能看起来像这样:
2021-08-08 12:32:43,987 11335 ERROR odoo odoo.addons.stock_enhanced.models.stock_move: 100.0
2021-08-08 12:32:43,990 11335 ERROR odoo odoo.addons.stock_enhanced.models.stock_move: 100.0
2021-08-08 12:32:44,009 11335 ERROR odoo odoo.addons.stock_enhanced.models.stock_move: 100.0
前两个值我不感兴趣,因为它们可能正确或不正确。只有最后一个是有趣的。所以以效率的名义而不是调用同一个函数,这将在瞬间调用外部API 3次,我想只在最后一次写入事件之后触发该函数。
现在我的问题来了,我该怎么做?只在第一次触发它很容易,但我不知道如何只在最后一次触发它。
【问题讨论】: