如何在变量值改变时执行函数?

时间:2018-01-22 21:43:46

标签: python-2.7 odoo-10

在Odoo 10中,我希望在预测的产品数量发生变化时更改变量的值。我尝试使用@ api.onchange装饰器,但它不起作用。预测的数量会发生变化,但变量保持相同的值。我有这个:

class MyProduct(models.Model):    
    _inherit = 'product.product'       
    was_changed = fields.Boolean(default = False)    
    @api.onchange('virtual_available')    
        def qtychanged(self):        
            self.was_changed = True        
            _logger.info('Product_Qty_Cahnged:  %s',str(self.virtual_available))

在此代码中,如果产品的预测数量发生变化,则应将变量was_changed设置为True,但不会发生任何变化。

之后,我尝试覆盖自定义类的write方法,如下所示:

class MyProduct(models.Model):
    _inherit = 'product.product'
    was_changed = fields.Boolean(default=False)

    @api.multi
    def write(self, values):
        if values['virtual_available']:
            values['was_changed'] = True
        # THE FOLLOWING LINES WERE IN THE ORIGINAL WRITE METHOD
        res = super(MyProduct, self).write(values)
        if 'standard_price' in values:
            self._set_standard_price(values['standard_price'])
        return res

但是,我仍然有同样的结果。我似乎无法改变这面旗帜。那么,有什么想法吗?

1 个答案:

答案 0 :(得分:0)

试试这个:

class MyProduct(models.Model):    
      _inherit = 'product.product'       
      was_changed = fields.Boolean(default = False)    
      @api.onchange('virtual_available')    
      def qtychanged(self):        
          self.write({'was_changed': True})        
          _logger.info('Product_Qty_Cahnged:  %s',str(self.virtual_available))