odoo14 many2many字段类型变化记录追踪

odoo自带的mail.thread模块具备字段变化记录功能,不过针对One2many和Many2many字段不生效 具体原因可以查看odoo源码中odoo/addons/mail/models/mail_tracking_value.py 中45行create_tracking_values函数中的处理

字段追踪及消息记录参考我另一篇文章:

odoo14 mail.thread邮件消息机制(发送消息、字段变化跟踪记录)icon-default.png?t=M276https://blog.csdn.net/weixin_44863237/article/details/123736932

如果我们实际开发中又需要实现记录many2many字段变化怎么办呢?

这里我通过自己写后台代码去检测many2many字段的变化,并将变化的结果发送到了消息记录模板实现了这一功能。

purchaser_id = fields.Many2many('hr.employee', 'purchaser_id_rel', column1='purchaser_id', column2='hr_employee_id', string='采购员', required=True)
    def write(self, vals):
        # 添加采购人员记录变化跟踪
        self.ensure_one()  # 确保记录为单个记录
        if 'purchaser_id' in vals:
            initial_value = self.purchaser_id.ids
            new_value = vals['purchaser_id'][0][2]
            # 判断两个列表是否相等
            if not operator.eq(initial_value, new_value):
                old = self.env['hr.employee'].search_read([('id', 'in', initial_value)])
                old_value_name = list(lst['name'] for lst in old)
                str = ','
                new = self.env['hr.employee'].search_read([('id', 'in', new_value)])
                new_value_name = list(lst['name'] for lst in new)
                body = '采购员:[%s]→[%s]' % (str.join(old_value_name), str.join(new_value_name))
                # 发送记录消息到chatter模板
                self.message_post(body=body, message_type='notification')
        return super(SupplierManagement, self).write(vals)

效果:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值