Odoo的数据库操作主要通过其对象关系映射(ORM)框架进行。使用ORM而不是直接写SQL允许开发者专注于业务逻辑,同时提供了安全性和数据完整性的保障。以下是对Odoo ORM的操作的详细描述:
创建(Create)
在Odoo中,创建一条新记录是通过模型的create方法完成的。这个方法接受一个字典,字典中的键是模型字段的名字,对应的值是你想要设置的值。
创建一个新的合作伙伴
new_partner = env['res.partner'].create({
'name': 'New Partner',
'email': 'new.partner@example.com',
'phone': '+1234567890',
'company_type': 'company',
})
更新(Update)
更新记录是通过调用记录集上的write方法来完成的,这个方法接受一个字典参数,其中包含了你想要更新的字段和对应的新值。
# 假设有一个现有的合作伙伴记录
partner = env['res.partner'].browse(partner_id)
# 更新这个合作伙伴的电话号码和电子邮件
partner.write({
'email': 'updated.email@example.com',
'phone': '+0987654321',
})
删除(Delete)
删除记录是通过调用unlink方法来实现的。你可以在单个记录上调用unlink,或者在一个记录集上调用它来删除多个记录。
# 删除单一记录
partner = env['res.partner'].browse(partner_id)
partner.unlink()
# 删除多个记录
partners = env['res.partner'].search([('country_id.name', '=', 'Belgium')])
partners.unlink()
搜索(Search)
在Odoo中,搜索记录是使用search方法完成的,这个方法接受一个域(domain)作为参数。域是一个由三元组组成的列表,每个三元组都包含字段名、操作符和值。
# 搜索中国的合作伙伴
partners_in_china = env['res.partner'].search([('country_id.name', '=', 'China')])
这将返回一个记录集,包含所有满足搜索条件的记录。
读取(Read)
你可以使用browse方法通过ID来获取记录集,然后使用记录集来读取记录的字段值。你也可以通过read方法来读取特定字段的值。
# 使用browse读取
partner = env['res.partner'].browse(partner_id)
partner_name = partner.name
# 使用read读取
partner_data = partner.read(['name', 'email', 'phone'])
read方法返回一个字典列表,每个字典都包含了所请求的字段及其值。
组合操作
Odoo ORM还允许在一个命令中进行复杂的写入操作,例如在更新一个One2many字段时可以同时添加、更新或删除关联的记录。
order.write({
'order_line': [
# 添加一个新的订单行
(0, 0, {'product_id': new_product_id, 'product_uom_qty': 10}),
# 更新现有的订单行
(1, existing_line_id, {'product_uom_qty': 20}),
# 删除一个订单行
(2, delete_line_id),
# 删除所有关联的订单行
(5,),
],
})
在这个例子中:
(0, 0, {…}) 添加新记录
(1, ID, {…}) 更新ID指定的记录
(2, ID) 删除ID指定的记录
(5,) 删除所有关联的记录