odoo 对many2many的控制
2020-07-01 本文已影响0人
隔壁小红馆
想实现,添加进来的记录,在此模型其他地方是不能选中
简单来说:就是被选择数据在别的地方不能选择,删除被选择的数据恢复(可以被其他选择)
这就要求对 titanium_id 这个字段监控了,对增加的数据标记,对之前存在现在取消的数据恢复,
针对此情况,在 titanium_id 关联的模型里添加布尔值来控制是否已经被选择
因为考虑到同时有删有减的情况,故不能用 onchange来监控了,就用 create 和 write 来 记录增加的数据和已删除数据,方便对增加的数据和已删除数据 进行标记操作
话不多说,上才艺
image.pngatitanium_reduce :数据减少的操作
atitanium_add:数据增加的操作
create 以及 write 的写法一样
def write(self, vals):
if 'titanium_id' in vals:
atitanium_reduce = list(set(self.titanium_id.ids).difference(set(vals['titanium_id'][0][2])))
atitanium_add = list(set(vals['titanium_id'][0][2]).difference(set(self.titanium_id.ids)))
for rec in atitanium_reduce:
self.env['production.titanium.blank'].browse(rec).locked = False
for rec in atitanium_add:
self.env['production.titanium.blank'].browse(rec).locked = True
return super(ProductionProductionPlan, self).write(vals)
这里也用到了列表的差异性,提取列表之间的不同的元素,