Odoo 学习 【二】Environment 概览
Environment
参考链接: http://odoo-new-api-guide-line.readthedocs.io/en/latest/environment.html#environment
在新的API中,引入了环境的概念,它的主要目标是提供对游标、用户ID、模型、上下文、记录集、和缓存的封装。
有了这些,你没有必要在再需传入这些函数参数:
# before
def afun(self, cr, uid, ids, context=None):
pass
# now
def afun(self):
pass
你可以如下访问环境:
def afun(self):
self.env
# or
model.env
环境是不可变的,并不能直接被修改,因为它也保存着缓存和记录集等等。
修改 Environment
你可以使用with_context
函数来修改你当前环境的上下文。
self.env['res.partner'].with_context(tz=x).create(vals)
注意不要使用这个功能来修改当前的记录集合:
self = self.env['res.partner'].with_context(tz=x).browse(self.ids)
在重新浏览之后,它将会修改记录集中当前的记录,这将会产生缓存和记录集合之间的不一致。
切换用户
环境提供了一个辅助函数来切换用户:
self.sudo(user.id)
self.sudo() # 默认将会使用SUPERUSER_ID
# or
self.env['res.partner'].sudo().create(vals)
访问当前用户
self.env.user
使用xml id来获取记录
self.env.ref('base.main_company')
某些时候,你会不得不要使用这个游标直接插入/写入。在这种情况下,你要想要使得缓存失效。
self.env.invalidate_all()