调用虚拟记录的onchange方法时如何修改上下文?

问题描述

我正在创建一个虚拟记录,以便将几个 onchange 方法的结果应用于它。问题是对于其中一种方法,我需要传递特定的上下文,但这会导致丢失虚拟记录数据。

这是我正在调用的 onchange 方法:

@api.multi
@api.onchange('product_id')
def onchange_product_id_valued(self):
    _logger.critical('PRODUCT INSIDE ONCHANGE')
    _logger.critical(self.product_id)

以下几行工作正常,我可以创建股票移动的虚拟记录,并且记录器打印产品正常:

virtual_move = self.env['stock.move'].new({
    ...
    'product_id': product.id,...
})
virtual_move.onchange_product_id_valued()

但是,以下几行不起作用。当我使用 with_context 设置特定上下文时,onchange 方法中的虚拟移动属性都是空的,因此记录器会打印一个 product.product 的空记录集:

virtual_move2 = self.env['stock.move'].new({
    ...
    'product_id': product.id,...
})
virtual_move2.with_context(
    partner_id=xxx,picking_type_id=yyy,date=zzz,pricelist_id=aaa,fiscal_position=bbb,).onchange_product_id_valued()

为什么会发生这种情况以及如何在不破坏虚拟记录数据的情况下向 onchange_product_id_valued 方法发送特定上下文?

解决方法

如果有人想知道如何解决这个问题,解决方案是在执行 new() 方法之前应用特定的上下文:

self = self.with_context(
    partner_id=xxx,picking_type_id=yyy,date=zzz,pricelist_id=aaa,fiscal_position=bbb,)
virtual_move2 = self.env['stock.move'].new({
    ...
    'product_id': product.id,...
})
virtual_move2.onchange_product_id_valued()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...