odoo的x2many字段由于赋值方式比较特殊,所以不能像普通字段一样直接给默认值,需要返回一个列表里面嵌套列表结构的数据。
1.先看many2many和one2many字段的赋值方式:
many2many
(0,0,{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, [8, 5, 6, 4])] 设置 many2many to ids [8, 5, 6, 4]
one2many
(0, 0,{ values })根据values里面的信息新建一个记录。
(1,ID,{values}) 更新id=ID的记录(对id=ID的执行write 写入values里面的数据)
(2,ID) 删除id=ID的数据(调用unlink方法,删除数据以及整个主从数据链接关系)
2.根据上面的赋值方式可以发现,看如下示例:
@api.model
def get_all_electric_vehicle(self):
'''
默认获取全部的列车
'''
electric_vehicle_ids = self.env['lintong.electric.vehicle'].search([])
vals = []
for item in electric_vehicle_ids:
vals.append([4, item.id])
return vals
electric_vehicle_ids = fields.Many2many('lintong.electric.vehicle',
'production_notice_electric_rel',
default=get_all_electric_vehicle,
string='列车选择')
注意:不同于compute属性,default属性的函数必须定义在字段定义之前