目录
env,全称 environment,是 Odoo 中常用的工具类之一。我们知道运行代码之前要建立环境,随后在环境中执行函数,环境中的方法是能够直接使用的,而 env 便是这样的一种环境。
env 提供了 ORM 对象的封装,我们最常用的就是执行 SQL 和利用 ORM 操作模型以及使用模型中的方法。
注:ORM是一个完整关系对象映射层,开发人员不用编写基础的SQL语句。
接下来就让我们进入 env 的揭秘环节!
env 有以下四类最常用的功能
/ env四大常用功能
在进行原始的数据库层面操作时,执行 SQL 语句,取到查询的返回数据,提交事务等等操作都离不开:
self.env.cr 创建的游标对象
self.env.cr.execute(SQL) 执行 sql 语句
self.env.cr.commit() 提交事务
当要判断某用户是否有访问某某页面,创建某某问题的权限时,我们需要利用用户的 id,便可以使用:
self.env.uid 查询当前用户的id
self.context.get('key') 获取前后文字典
上下文数据的传输在同一个页面上使用不多,但在跳转页面、以及页面与页面的联动时,效果显著。
比如从页面A编辑进入页面B,从页面B查看进入页面C,以简单的三层页面嵌套来讲,从页面C返回页面B时仍然是从A进入B的编辑样式。
这一点从页面C返回到页面B是不知道的,所以就需要我们使用页面的上下文来记录页面的状态,更多更复杂的页面结构,都缺少不了这种状态的记录。
同样还有最简单的字段显示,重写了name_get方法的字段,如果没有上下文字典无法显示完成的字段信息。
self(su=True)['res.users'].search() 设置超级管理员权限执行
在一些重要信息的进行执行时,我们可以使用超级管理员权限,将其放到最高优先级执行。
除了上述最常用的功能之外,env几乎包揽了所有有可能需要的功能
self.env.ref('模型下的视图id').id 查询视图id
该方法方便我们实现跳转视图,可直接跳转,也可以使用重定向调到指定 id 的视图,也可以使用 url 跳转,把到指定视图的 id 拼到 url 中。
我们使用 odoo 系统每次页面跳转的时候,url 里拼接的参数就是这次跳转行为的终点。
使用 ref 方法能查询到视图的 id 和动作的 id,从这一方面来讲,没有页面是拼接不了的。
查询是否有处于超级管理员模式,返回布尔类型。
权限查询涉及的方面多是权限操作,特别是等级分明的业务场景上例如银行,权限的要求更加严格。
查询是否在‘access rights’组中,返回布尔类型。
查询是否在‘setting’组中,返回布尔类型,权限类型依次降低。
获取当前用户的作为一个对象,该对象的属性都可以按需要取到。
查询语言类型,查询语言的方法封装的是self中默认的上下文语言信息
清除缓存,在一次失败的ORM中恢复操作可以使用。
如果执行了错误的操作,并且上次操作中修改过的属性会影响到后续操作的进行,这个时候就有必要清除缓存,在一个无干扰的环境下执行操作。
查看是不是草稿状态。
查看是不是处于onchange状态。
我们在开发中最常用的方法,从env中注册的模型,从而使用该模型中的方法。
模型中默认的查询、创建、更新、删除方法,以及自定义的方法函数都能使用。
self.env.clear_upon_failure()
清除环境上下文管理器(字段缓存再计算)
返回记录是否了保护字段;字段被保护之后不能重新计算。
对于需要onchange的关联字段如果不能出发计算,要考虑到是不是因为字段被保护了
保护字段不能失效或重新计算。
防止记录上的字段失效或者重新计算。
返回要计算的字段的视图。
返回要计算字段的记录表。
返回是否必须在记录中计算的字段。
返回记录的子集,其中字段不能被计算。
标记字段要在记录上计算。
返回是否必须在记录中计算的字段。
最后还需提及的一点是:当有多个任务同时进行时,各个任务分配相同的环境,基础设置相同的前提下,又相互隔离相互独立。
那么以上就是有关env工具库的全部内容了,相信一定能对你有所帮助~
版权声明:该内容由神州数码云基地团队编撰,转载请注明出处!
微信公众号后台回复“Odoo”,可加入技术交流群!