如何获取函数中字段的旧值 - Odoo 12

How to get old value of a field in a fucntion - Odoo12

我试图在 onchange 方法中获取字段的旧值。

这是我试过的。

@api.onchange('assigned_to')
# @api.depends('assigned_to')
def onchange_assigned_to(self):
    print('onchange_assigned_to')
    history = self._origin.read(["assigned_to"])
    if history:
        id = history[0]["assigned_to"][0]
        last_assigned = self.env['res.users'].browse([id])
        self.last_assign_id = last_assigned        

以上代码有效,只有通过 GUI 更改字段值时,我才能获得旧值。

我也在通过按钮操作更改字段值。那时候这个功能不起作用。

我怎样才能做到这一点?

而且我还尝试使用 @api.depends 计算函数。

那一次我得到了

'AttributeError: 'crm.lead' object has no attribute '_origin''

你可以在write方法中实现这个,并且永远有效,你可以保持onchange 如果您想给用户一个反馈:

     @api.multi
     def write(vals):
        """ keep assignment history. """
        if 'assigned_to' in vals:  # keep assignment history
            # no need to keep it in vals here
            vals.pop('last_assign_id', None)

            for rec in self:
                rec.last_assign_id = rec.assigned_to

        return super(ClassName, self).write(vals)