Odoo12 ORM API ☞ Environment

Environment


Environment(环境) 存储ORM使用的各种上下文数据:数据库游标(用于数据库查询),当前用户(用于访问权限检查)和当前上下文(存储任意元数据)。环境还存储缓存。
所有记录集都有一个不可变的环境,可以使用env访问,并允许访问当前用户(user),游标(cr)或上下文(context):

>>> records.env
<Environment object ...>
>>> records.env.user
res.user(3)
>>> records.env.cr
<Cursor object ...)

从其他记录集创建记录集时,将继承环境。该环境可用于在其他模型中获取空记录集,并查询该模型:

>>> self.env['res.partner']
res.partner
>>> self.env['res.partner'].search([['is_company', '=', True], ['customer', '=', True]])
res.partner(7, 18, 12, 14, 17, 19, 8, 31, 26, 16, 13, 20, 30, 22, 29, 15, 23, 28, 74)

Altering the environment(改变环境)

可以从记录集中自定义环境。返回使用已变更环境的记录集的新版本。
sudo()
使用提供的用户集创建新环境,如果未提供任何用户,则使用管理员(绕过安全上下文中的访问权限/规则),使用新环境返回调用它的记录集的副本:

# 以管理员身份创建合作伙伴
env['res.partner'].sudo().create({'name': "A Partner"})

# 列出“公共”用户可见的合作伙伴
public = env.ref('base.public_user')
env['res.partner'].sudo(public).search([])

with_context()

  • 可以采用单个位置参数,它替换当前环境的上下文
  • 可以通过关键字获取任意数量的参数,这些参数将添加到当前环境的上下文或步骤1中设置的上下文中
# 寻找合作伙伴,或者如果没有找到,则创建具有指定时区的合作伙伴
env['res.partner'].with_context(tz=a_tz).find_or_create(email_address)

with_env()
完全取代现有环境

猜你喜欢

转载自blog.csdn.net/sinat_23931991/article/details/84989077