odoo中的关系字段

Many2one

定义
每本书只有一个出版社,因此在图书和出版社之间可以使用 many-to-one 关联。

运行原理
Many-to-one字段向模型的数据表中添加了一列,存储关联记录的数据库ID。在数据库级别上,还会创建外键约束,确保保存的ID是对关联表中记录的有效引用 。对这些关联字段不会创建数据库索引,但这可通过添加 index=True 属性来进行完成。

属性

  • ondelete
    属性决定在关联记录删除时执行什么操作。例如,在出版社记录删除后图书会怎么样?默认值为’set null’,,会将该字段置为空值。也可以为’restrict’,会阻止关联字段的删除,或者是 ‘cascade’,这会导致关联的字段同样被删除。
  • context
    在点击字段进入关联记录视图时context会向客户端上下文添加变量。
  • domain
    用于限制可用的关联记录列表的搜索过滤器。
  • auto_join
    这个标记允许ORM对这个字段使用SQL连接(join)。因此它不受普通的ORM限制,如用户访问控制和记录权限规则。在具体的用例中,它可以解决性能问题,但建议尽量避免使用。

One2many

定义
每个出版社都可以出版多本书。因此对前面的many-to-one 关联进行反向则成为one-to-many 关联。

运行原理
One-to-many字段是many-to-one的反向关联,虽然它们像其它字段一样添加在模型中,在数据库中并没有实际的体现。他们仅是编程捷径,启用视图来展现这些关联记录列表。

属性

  • comodel_name
    这是目标模型标识符,对所有关联字段是强制的,但可以占位定义而无需使用关键字
  • inverse_name
    它仅应用于One2many,是反向Many2one关联的目标模型中的字段名
  • limit
    它在One2many和Many2many中使用,对在用户界面级别上用于记录读取的数量设置可选限制

Many2many

定义
每本书可以有多个作者。而反过来每位作者也可以写多本书。从任意一方看,这是一个many-to-many关联。

运行原理
Many-to-many关联也不会向模型数据表添加列。这类关联在数据库中使用中间关联表进行体现,其中有两列分别存储这两个关联的ID。在图书和作者之间添加新关联在这个关联表中使用图书ID和作者ID创建一条新记录。
Odoo自动处理这一关联表的创建。关联表的名称默认使用两个关联模型名按字母排序加上一个_rel后缀来创建。但我们可以使用relation属性来进行覆盖。

需要考虑的一种情况是两个表名过长导致自动生成的数据库标识符超过PostgreSQL的上限63个字符。按照经验,如果两个关联的表名超过23个字符时,应使用relation属性来设置一个更短的名称。

属性

  • comodel_name
    它的功能与One2many字段中相同
  • relation
    这是用于支持关联的数据表的名称,覆盖自动定义的名称
  • column1
    这是连接这个模型的关联表中的Many2one字段的名称
  • column2
    这是在关联数据表中连接comodel的Many2one字段的名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值