【ORM】 odoo常用orm

实现原理

api 模块中的 Environment 类,我们就是要用这个初始化出一个 env 来操作数据库,不过 Odoo 已经在启动命令行时帮助我们将这个 env 初始化好了。我们可以利用 env 来得到我们的数据库模型,并且操作数据库表。

Environment 通过ORM存储各种环境中的数据:数据库游标(数据库查询) 、
当前用户 (用来权限检查)、当前环境(存储任意的元数据)。环境可以被存储在缓存中。
所有的记录集都有一个不可变的环境,它可以通过 env 访问,通过 (user), 游标 (cr) or 上下文 (context)给当前用户访问

create()

rslt = super(AccountJournal, self).create(vals)

create 方法用于创建模型数据,参数可以为 dict 或 list 类型,创建后会返回创建的记录或记录集。

search()

self.env['account.journal'].search([('type', '=', 'general')], limit=1)

search 方法用于搜索已存在的数据,与大多数 ORM 框架不同,Odoo 搜索时传入的是一个 domain,它是一个列表形式的参数,在后面的章节会详细介绍这里先不做讲解。 除了 domain 参数,还有 offset、limit、order 和 count,这些都是可选字段。

write()

rslt = super(AccountJournal, self).write(vals)

write 方法用于修改数据,传入参数为 dict 类型,修改后会返回布尔值 True。

browse()

self.env['account.invoice'].browse(active_ids)

browse 方法可以通过 id 直接返回数据或结果集,参数可以为 dict 或 list 类型。

exists()

request.env[model].sudo().browse(res_id).exists()

exists 用于过滤出数据库中确实存在的数据,这个用法比较奇特需要注意一下。
在上文中我们用 browse 方法搜索出了记录集 records。

ref()
环境的方法返回匹配到的 external id 的记录

env.ref('base.group_public')

ensure_one()
检查该记录集是一个signleton(仅包含一个单一记录),否则提示一个错误

records.ensure_one()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值