如何在调用虚拟记录的onchange方法时修改上下文?
How to modify context when calling onchange methods of virtual records?
我正在创建一个虚拟记录,以便将几个 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()
我正在创建一个虚拟记录,以便将几个 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()