odoo ORM 笔记(一)

        这里将记录我再odoo学习和探索中的收获,可以供大家参考,也方便我后续查阅笔记。

1.ORM

        1.self.env 对象

        在 Odoo 中,self.env 是一个重要的对象,它是 Odoo ORM 中的核心对象之一。self.env 是一个 Odoo 环境,它提供了访问 Odoo 数据库的 API。在 self.env 中,您可以使用 Odoo ORM 操作数据库中的数据,例如创建、读取、更新和删除记录。

下面是 self.env 中一些常用的方法:

  1. search(): 使用条件从数据库中检索记录,返回符合条件的记录 ID 列表
  2. browse(): 根据 ID 列表获取记录,返回一个记录集。
  3. create(): 创建新记录,并将其写入数据库。
  4. write(): 更新指定 ID 的记录,并将更改写入数据库。
  5. unlink(): 根据指定 ID 删除数据库中的记录。
  6. read(): 从数据库中读取指定 ID 的记录。
  7. execute(): 执行原始 SQL 查询,并返回查询结果。

用法如下:

# 获取所有状态为'open'的sale.order记录
orders = self.env['sale.order'].search([('state', '=', 'open')])

# 获取id为1的sale.order记录
order = self.env['sale.order'].browse(1)
# 获取order对应的partner记录
partner = order.partner_id

# 获取id为1的sale.order记录的name和partner_id字段的值
order_data = self.env['sale.order'].browse(1).read(['name', 'partner_id'])

# 创建一条新的sale.order记录
new_order = self.env['sale.order'].create({'name': 'New Order', 'partner_id': 1})

# 修改id为1的sale.order记录的name字段的值为'Updated Order'
self.env['sale.order'].browse(1).write({'name': 'Updated Order'})

# 删除id为1的sale.order记录
self.env['sale.order'].browse(1).unlink()

# 以超级用户的身份获取id为1的sale.order记录
order = self.env['sale.order'].sudo().browse(1)

# 定义SQL语句   execute遍底层不建议二开使用
sql = "SELECT * FROM %s WHERE name LIKE '%%s%%'"
# 执行SQL语句
self.env.cr.execute(sql % (table_name, 'odoo'))
# 获取查询结果
result = self.env.cr.fetchall()

         除了上述常用的方法,self.env 还提供了其他一些方法,例如 name_search()、search_count()、exists()、mapped() 等等。其中,name_search() 可以通过名称搜索记录,search_count() 可以获取符合条件的记录数量,exists() 可以检查记录是否存在,mapped() 可以将一个记录集映射到一个字典中。

  1. name_search(name='', args=None, operator='ilike', limit=100) 方法用于在模型的名称字段(默认为 name 字段)上进行查询,返回匹配指定名称(name)的记录 ID 和名称(name)列表。

    result = self.env['res.partner'].name_search(name='Acme')

    在上面的示例中,name_search() 方法会在 res.partner 模型的名称字段上查找包含 "Acme" 的名称,返回匹配的记录 ID 和名称列表。可以通过传递参数 args 来添加其他筛选条件。可以通过传递参数 limit 来指定返回结果的最大数量。

  2. search_count(domain=None) 方法用于计算符合给定域(domain)条件的记录数。

    count = self.env['res.partner'].search_count([('is_company', '=', True)])

    在上面的示例中,search_count() 方法会计算符合 is_company=True 条件的 res.partner 模型的记录数。 

  3. exists() 方法用于检查是否存在符合给定条件的记录。

    exists = self.env['res.partner'].exists([('is_company', '=', True)])

    在上面的示例中,exists() 方法会检查是否存在 is_company=True 条件的 res.partner 模型的记录。如果存在,返回 True,否则返回 False

  4. mapped(function, *args, **kwargs) 方法将指定函数应用于查询结果的每个记录,并返回一个字典,其中键是记录 ID,值是函数的结果。

    result = self.env['res.partner'].search([('is_company', '=', True)]).mapped('name')

    在上面的示例中,mapped() 方法会筛选出所有 is_company=True 条件的 res.partner 模型的记录,并将 name 字段的值应用于每个记录,最终返回一个字典,其中键是记录 ID,值是 name 字段的值。

        在二次开发时,我们经常会用到 self.env 对象,例如创建自定义的业务逻辑、修改数据结构、添加字段等等。另外,在二次开发时,您也可以使用 self.env.context 来访问 Odoo 上下文,它是一个字典,可以在模型中存储上下文信息。

        总之,self.env 是 Odoo ORM 的核心对象之一,它提供了一个强大的 API,可以帮助开发人员轻松访问和操作 Odoo 数据库中的数据。在二次开发时,了解 self.env 的方法和属性,能够更加高效地进行开发工作

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值