我到处都看到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但上下文不会更新
答案 0 :(得分:1)
您可以使用上下文将数据/参数从操作传递到python代码。例如,在上下文中,您可以设置要使用的特定视图。我经常用它来修改视图到field_view_get。
了解更多信息
答案 1 :(得分:1)
上下文是一个python字典,用于将某些数据传递给方法。由于几乎所有方法都有上下文参数,因此您可以使用上下文通过多个级别的python方法传递数据。例如,您可以在XML视图中设置上下文值,并在osv对象的write()方法中处理它。
context.get(' active_id',FALSE)
返回键' active_id'的值。如果密钥不在上下文中,则返回值“False'。
”' active_id'中的值从Web客户端传递并包含当前所选记录的ID。
了解更多信息: - Link