【问题标题】:How to get old value of a field in a fucntion - Odoo12如何获取函数中字段的旧值 - Odoo 12
【发布时间】:2019-09-30 06:42:25
【问题描述】:

我正在尝试在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' 对象没有属性'_origin''

【问题讨论】:

  • 最后,您的assigned_to 将按照write() 写入,因此我会将您的逻辑直接实施到write() 中,而不是在“onchange”环境中正确执行。按钮的东西不起作用,因为在调用按钮定义的任何东西之前,write() 上有一个调用。

标签: odoo odoo-12


【解决方案1】:

你可以在 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    相关资源
    最近更新 更多