odoo14 many2many关联字段赋值详解及one2many字段定义及赋值
简介:实际项目开发中经常需要涉及到表与表之间数据的交互关联,Odoo中关联字段就是用来绑定表与表之间数据主从关系的。Odoo中的关联字段有:Many2one 主表中创建一个字段来存储从表记录的id。这就意味着主表的每条记录只能关联从表中的一条记录。打个比方,银行卡记录表是主表,我们的身份证是从表,每张银行卡只能属于一个人,也就是每张银行卡只能关联一个身份证。One2many 和上边的Many2on
简介:实际项目开发中经常需要涉及到表与表之间数据的交互关联,Odoo中关联字段就是用来绑定表与表之间数据主从关系的。
Odoo中的关联字段有:
- Many2one 主表中创建一个字段来存储从表记录的id。这就意味着主表的每条记录只能关联从表中的一条记录。打个比方,银行卡记录表是主表,我们的身份证是从表,每张银行卡只能属于一个人,也就是每张银行卡只能关联一个身份证。
- One2many 和上边的Many2one是相反的,主表是身份证,从表是银行卡,一个身份证可以拥有多张银行卡。One2many和Many2one一起使用的时候主从表数据可以互通。odoo中创建这个字段的时候,odoo会创建一张视图来处理他们的关系,获取从表中的id和从表中的存储Many2one字段组成的视图。
- Many2many 和One2many不一样,odoo会生成辅助表来存储主从表id与id之间的关联,辅助表中有两个字段,一个是主表的id,一个是从表的id,所以这里每个主表id可以与多个从表id关联。和Many2one不同的是,Many2many是单项关联从表,所以从表并不知道。如:身份证表中关联了多张银行卡,但银行卡中没有身份证id的字段;这样的话通过身份证可以得到银行卡的信息,但却不能通过银行卡得到身份证的信息。
1. 关联字段操作格式
many2many
(0,0,{values}) 根据values里面的信息新建一个记录。(values是一个字典,以下同样)
(1,ID,{values})更新id=ID的记录(写入values里面的数据)
(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)
(3,ID) 切断主从数据的链接关系但是不删除这个数据
(4,ID) 为id=ID的数据添加主从链接关系。
(5) 删除所有的从数据的链接关系就是向所有的从数据调用(3,ID)
(6,0,[IDs]) 用IDs里面的记录替换原来的记录(就是先执行(5)再执行循环IDs执行(4,ID))
例子[(6, 0, [1, 2, 3, 4])] 设置 many2many to ids [1, 2, 3, 4]
one2many
(0, 0,{ values })根据values里面的信息新建一个记录。
(1,ID,{values}) 更新id=ID的记录(对id=ID的执行write 写入values里面的数据)
(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)
(6,0,[IDs]) 用IDs里面的记录替换原来的记录(就是先执行(5)再执行循环IDs执行(4,ID))(先有数据再和关联字段绑定)
2.many2many赋值举例
# 定义一个many2many字段
purchase_strategy_ids = fields.Many2many('purchase.strategy.line', column1='purchase_strategy_rel',
column2='purchase_strategy', string='采购报价')
- (0,0,{values}) 原理:根据values的值新建一条purchase.strategy.line记录,并将记录id与purchase_strategy_ids关联
for line in rec.purchase_strategy_line:
self.purchase_strategy_ids = [(0, 0, {'purchaser_id': line.purchaser_id.id,
'large_price': line.large_price,
'little_price': line.little_price,
'history_price': line.history_price})]
'history_price': line.history_price})]
- (4,ID) 原理:purchase.strategy.line表中id=ID的数据与purchase_strategy_ids添加主从链接关系
for line in rec.purchase_strategy_line:
self.purchase_strategy_ids = [(4, line.id)]
- (6,0,[IDs]) 原理:用IDs里面的id关联的记录替换原来的记录,生成新的主从关联关系
self.purchase_strategy_ids = [(6, 0, [1, 2, 3, 4])]
3.one2many字段定义及赋值举例
class PurchaseApplication(models.Model):
_name = 'purchase.application'
# 定义一个one2many字段,通过order_id字段绑定purchase.strategy.line模型
purchase_strategy_line = fields.One2many('purchase.strategy.line', 'order_id', string='采购策略')
class PurchaseStrategy(models.Model):
_name = 'purchase.strategy.line'
# order_id字段指向purchase.application模型,进行反向绑定。purchase.application模型和purchase.strategy.line模型形成双向绑定,一个订单对应多个报价,每个报价指向对应订单
order_id = fields.Many2one('purchase.application', string='申购订单', required=True)
- (0,0,{values}) 原理:根据values的值新建一条purchase.strategy.line记录,并将记录id与purchase_strategy_line关联
self.purchase_strategy_ids = [(0, 0, {'value'})]
one2many赋值方式类似于many2many赋值方式,相信理解了上面的内容并不难实现。
更多推荐
所有评论(0)