在onchange方法中上下文没有更新(odoo-v8)



我到处看到odoo添加了cr, uid, ids, contextcruidids可以理解,但是context是用来干什么的呢?为什么这么重要?

通过观察上下文,我发现它是一个简单的字典,主要包含时区和一些更多的信息,所以它仅限于这些值或更重要的东西?

我们如何在编程中更好地使用它?上下文的优点和缺点是什么?

我想在两个相互依赖的onchange方法之间交换信息,如字段折扣和price -(新api ooo8)。

折扣更新后的价格会改变,而价格更新后的折扣会更新。

这是我的代码

@api.onchange('discount')
def discount_change(self):
    ctx = self.env.context.copy()
    if ctx.get('list_price_updated',False):
        return True
    ctx.update({'discount_updated':True})
    new_obj = self.with_context(ctx)
    PPC = (self.rapnet_price + (self.rapnet_price * self.discount / 100)
    list_price = PPC * new_obj.weight
    new_obj.price_caret = PPC
    new_obj.list_price = list_price
@api.onchange('list_price')
def list_price_change(self):
    ctx = self.env.context.copy()
    if ctx.get('discount_updated',False):
        return True
    ctx.update({'list_price_updated':True})
    new_obj = self.with_context(ctx)
    list_price = self.list_price / self.weight
    new_discount = (1 - (list_price / self.rapnet_price)) * -100
    new_obj.price_caret = list_price
    new_obj.discount = new_discount

new_obj = self.with_context(ctx)使用这行,我得到上下文值,但没有调用其他onchange,而使用self而不是new_obj其他onchange调用,但上下文不会更新。

例如,您可以使用上下文将数据/参数从操作传递给python代码。例如,在上下文中,您可以设置要使用的特定视图。我经常使用它来将视图修改为field_view_get。

看一下这个获取更多信息

上下文是什么?

上下文是一个python字典,用于将某些数据传递给方法。因为几乎所有的方法都有一个上下文参数,你可以使用上下文在不同层次的python方法中传递数据。例如,您可以在xml视图中设置上下文值,并在osv对象的write()方法中处理它。

context.get (active_id,假)

返回键'active_id'的值。如果键不在上下文中,则返回值'False'。

'active_id'中的值是从web客户端传递的,包含当前选中记录的ID。

查看更多:- Link

最新更新