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

时间:2015-10-14 07:50:56

标签: python openerp odoo

我到处都看到odoo添加了 cr,uid,id,context cr uid ID 是可以理解的,但上下文是针对什么的?为什么它如此重要?

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

我们怎样才能更好地在编程中使用它? 上下文有哪些优点,有哪些缺点?

问题

我想在两个相互依赖的onchange方法之间交换信息,比如字段折扣和价格 - (new api odoo8)。

虽然折扣更新价格将会更改,而价格更新折扣将会更新。

这是我的代码

@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)使用此行我获取了上下文值但是在使用self而不是new_obj其他onchange调用时没有调用其他onchange但上下文不会更新

2 个答案:

答案 0 :(得分:1)

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

了解更多信息

What's the context?

答案 1 :(得分:1)

上下文是一个python字典,用于将某些数据传递给方法。由于几乎所有方法都有上下文参数,因此您可以使用上下文通过多个级别的python方法传递数据。例如,您可以在XML视图中设置上下文值,并在osv对象的write()方法中处理它。

context.get(' active_id',FALSE)

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

' active_id'中的值从Web客户端传递并包含当前所选记录的ID。

了解更多信息: - Link