Odoo 随笔

1.default关键字:

当将函数赋值给default关键字时,函数的参数self并不指代当前操作的记录,简单来说,就是这个self跟当前新建的记录(record)没有任何关系。但该self仍然是一个odoo对象,可以通过它使用env找到其他模型,获取其他模型的数据
例子:

def _get_company_hot_line(self):

"""获取所属公司客服热线作为默认值"""

return self.env.user.company_id.hot_line

self虽然与当前记录无关,但可以用self.env.user找到当前登录的user模型,并通过其company_id(这是一个many2one字段,指向0个或1个记录),获取hot_line字段的值

2.context:

Odoo中的context相当于全局变量,可以使函数不通过参数传值,而使用一些默认的变量
但,Odoo中的context有一个坑:

  • 调用函数时,self._context是Odoo里面的frozendict类型,不允许直接修改context的值

所以,实际上,如果发现函数调用时,context中有我们不想用的数据,那就需要新创建一个context,具体做法如下:

ctx = self._context 
self.with_context(ctx).your_function() # 用例1
super(yourClass,self.with_contex(ctx)).your_function() # 用例2

你可能感兴趣的:(Odoo 随笔)