模型(model)之间的关系
简介
模型与模型之间一定会存在某种联系,比如说一张销售订单与销售员和客户有关系,
销售单和销售单行(产品)记录也有相互的联系。
关系字段
关系字段有三种:
Many2one(other_model, ondelete='set null')
数据库外键,比如销售订单上会有一个客户字段,这个字段并不是一个普通的
字符串,他实际上是一个res.partner模型的记录,如此两个模型的需求就
可以通过M2O字段来实现。
One2many(other_model, related_field)
一种虚拟的关系,是M2O的逆字段,它包含一组记录数据,当然也可能是没数
据。
我们可以简单的理解,如果销售订单和销售订单行是1:N的关系。
那么对于销售订单的model来说就必须有一个包含多值的O2M记录字段,
对于销售订单行来说,每一个行唯一的指向一个销售订单记录M2O记录字段
如果出现O2M字段,那么其对应关系模型中一定有一个指回来的M2O逆字段。
O2M上的related_field属性就是对应的M2O字段名
Many2many(other_model)
一种复杂的桥接关系,我们简单的理解就是模型A与模型B是N:N的关系
这样的关系无论是在A中存储还是在B中存储都不能满足多对多
所以提供了一种M2M字段,当前模型创建后与其他模型的一种关系字段。
当你创建好升级看结果时,会发现这张表只有两个字段,一个是当前模型的ID,
一个是关联模型的ID,多对多的关系很好理解。
sale_order_id = fields.Many2one(comodel_name="sale.order.line")
sale_order_line_ids = fields.One2many(comodel_name="sale.order",
inverse="sale_order_id")
partner_ids = fields.Many2many(comodel_name='res.partner',
relation="sale_order_and_partner_rel",
column1='sale_order_id',
column2='partner_id')