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