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
    评论
Odoo中,可以通过Many2one字段Many2many字段传递值。这可以通过使用Odoo的特殊语法和API来实现。 具体方法如下: 1. 在Many2one字段对应的模型中,添一个Many2many字段,用于存储传递的值。例如,我们在模型A中添一个Many2many字段,用于存储传递给模型B的值。 ```python class ModelA(models.Model): _name = 'model.a' name = fields.Char(string='Name') value_ids = fields.Many2many(comodel_name='model.b', string='Values') ``` 2. 在Many2one字段对应的模板中,添一个Many2many字段的下拉菜单,用于选择传递的值。这可以通过使用Odoo的特殊语法和API来实现。例如,我们在模板中添一个下拉菜单,用于选择传递给模型B的值。 ```xml <field name="value_ids" widget="many2many_tags"/> ``` 3. 在Many2one字段对应的模型中,添一个按钮,用于触发传递操作。按钮的onClick方法中,通过API获取Many2many字段的值,并将其传递给Many2one字段对应的记录中。例如,我们在模型A中添一个按钮,用于触发传递操作。 ```python @api.multi def transfer_values(self): for record in self: values = record.value_ids.ids record.other_model_id.write({'many2many_field': [(6, 0, values)]}) ``` 在上述代码中,我们通过API获取Many2many字段的值,并将其传递给Many2one字段对应的记录中。 通过上述方法,我们可以实现Many2one字段Many2many字段传递值的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值