one2many是odoo中的关联字段,绑定表与表之间数据主从关系的。
一般对one2many字段操作有如下:
(0, 0,{ values })根据values里面的信息创建一条新的记录。
(1,ID,{values}) 更新id=ID的记录(对id=ID的执行write 写入values里面的数据,只更新values的数据,其它数据不更改)
(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)
(6,0,[IDs]) 用IDs里面的记录替换原来的记录(就是先执行(5)再执行循环IDs执行(4,ID))(先有数据再和关联字段绑定)
一般情况下,这些操作非常便捷,但是有一些特殊的情况,一个一个添加数据会比较繁琐
如:一个a模型和b模型 同时关联c模型。现在b模型想要从a模型中复制 c的数据 ,如果用(0, 0,{ values })的方法,就很麻烦。
只需要先复制a模型关联字段,然后把复制的数据 关联a的id 清空,加上关联b的id 就可以了 这样就可以快速复制添加一个one2many数据。
如:
class modelA(models.Model): _name = 'modela' fila = fields.One2many('mainc','model_a') class moddelB(models.Model): _name = 'modelb' filb = fields.One2many('mainc','model_b') class mainC(models.Model): _name = 'mainc' name = fields.Char('Name') date = fields.Date('Date') model_a= fields.Many2one('modela') model_b= fields.Many2one('modelb')
现在fila 是有数据的 filb现在想复制fila的数据 只需要 用fila.copy({"model_a":"","model_b":modelb.id})
实际上 也就是手动关联主从关系