pythonodoo

odoo 对many2many的控制

2020-07-01  本文已影响0人  隔壁小红馆

想实现,添加进来的记录,在此模型其他地方是不能选中
简单来说:就是被选择数据在别的地方不能选择,删除被选择的数据恢复(可以被其他选择)
这就要求对 titanium_id 这个字段监控了,对增加的数据标记,对之前存在现在取消的数据恢复,
针对此情况,在 titanium_id 关联的模型里添加布尔值来控制是否已经被选择
因为考虑到同时有删有减的情况,故不能用 onchange来监控了,就用 create 和 write 来 记录增加的数据和已删除数据,方便对增加的数据和已删除数据 进行标记操作

话不多说,上才艺

image.png

atitanium_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)

这里也用到了列表的差异性,提取列表之间的不同的元素,

上一篇 下一篇

猜你喜欢

热点阅读