本文主要是介绍odoo14 many2many字段类型变化记录追踪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
odoo自带的mail.thread模块具备字段变化记录功能,不过针对One2many和Many2many字段不生效 具体原因可以查看odoo源码中odoo/addons/mail/models/mail_tracking_value.py 中45行create_tracking_values函数中的处理
字段追踪及消息记录参考我另一篇文章:
odoo14 mail.thread邮件消息机制(发送消息、字段变化跟踪记录)https://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.idsnew_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)
效果:
这篇关于odoo14 many2many字段类型变化记录追踪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!