我到处看到odoo添加了cr, uid, ids, context。cr、uid和ids可以理解,但是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