odoo基础之操作ORM表映射关系

在Odoo框架中,对表进行增删改查操作通常需要使用Odoo的ORM(对象关系映射)机制。以下是对表进行增删改查的基本操作:
  1. 查询记录(查询操作):
    • 使用search()方法来查询符合特定条件的记录。
    • 使用browse()方法来获取特定记录的详细信息。
    • 使用read()方法来读取记录的特定字段值。
  2. 创建记录(新增操作):
    • 使用create()方法来创建新的记录。
    • 在创建记录时,可以指定每个字段的值。
  3. 更新记录(修改操作):
    • 使用write()方法来更新现有记录的值。
    • 在更新记录时,可以指定要修改的字段及其新值。
  4. 删除记录(删除操作):
    • 使用unlink()方法来删除现有记录。
对于一对多和多对多关系的操作,需要注意以下几点:
  • 一对多:在一个模型中,可以定义一个多个字段来引用另一个模型的记录。可以使用One2many字段关系来表示一对多关系。在操作时,可以通过对一个进行操作来自动处理关联的多方面。
  • 多对多关系:在两个模型之间可以定义一个多对多关系,其中每个模型都可以引用另一个模型的多个记录。可以使用Many2many字段来表示多对多关系。在操作时,需要创建中间表来管理两个模型之间的关联关系。
以下是一些示例代码,演示如何在 Odoo 中进行增删改查操作:
from odoo import models, fields, api

# 示例模型定义
class MyModel(models.Model):
    _name = 'my.model'
    
    name = fields.Char('Name')
    related_ids = fields.One2many('related.model', 'my_model_id', 'Related Models')
    many2many_ids = fields.Many2many('other.model', 'my_model_other_model_rel', 'my_model_id', 'other_model_id', 'Many2Many Models')
    
class RelatedModel(models.Model):
    _name = 'related.model'
    
    name = fields.Char('Name')
    my_model_id = fields.Many2one('my.model', 'My Model')
    
class OtherModel(models.Model):
    _name = 'other.model'
    
    name = fields.Char('Name')
查询记录的示例代码:
# 查询所有记录
records = self.env['my.model'].search([])

# 查询特定记录
record = self.env['my.model'].browse(record_id)

# 读取特定字段的值
name = record.name
创建记录的示例代码:
# 创建新记录
new_record = self.env['my.model'].create({'name': 'New Record'})

# 通过一对多字段创建关联记录
related_record = self.env['related.model'].create({'name': 'Related Record', 'my_model_id': new_record.id})

# 通过多对多字段创建关联记录
new_record.many2many_ids = [(4, other_model_id)]
更新记录的示例代码:
# 更新记录
record.write({'name': 'Updated Name'})

# 更新一对多关系
record.related_ids = [(6, 0, [related_model_id1, related_model_id2])]

# 更新多对多关系
record.many2many_ids = [(6, 0, [other_model_id1, other_model_id2])]
删除记录的示例代码:
# 删除记录
record.unlink()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值