问题描述
我正在创建一个虚拟记录,以便将几个 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()