在odoo 10中创建新对象后如何调用我的方法?

时间:2018-11-14 12:17:38

标签: python python-2.7 odoo odoo-10

我正在使用从模块stock.quant继承的odoo 10,我添加了新的属性和新的方法。 我希望在每次在stock.quant中创建一个新对象后执行我的方法。 这是我的代码 感谢您的帮助

class stock_quant(models.Model):
    _inherit = 'stock.quant'
    inventory_value_charge = fields.Float('Total Value',store=True,compute='update_stock_value')

    @api.one
    @api.depends('qty')
    def update_stock_value(self):
        stock_price_obj = self.env['stock.price.partition'].search([('id', '!=', False)])
        val_obj = stock_price_obj.search([('reception.pack_operation_product_ids.pack_lot_ids.lot_id.id', '=', self.lot_id.id)])
        if val_obj!= False:
            val_obj.calccule_price()
        else:
            self.inventory_value_charge=self.inventory_value
        #stock_price_obj = self.env['stock.price.partition'].search([('reception.pack_operation_product_ids.pack_lot_ids.lot_id.id', '=', self.lot_id.id)])
        return True

    @api.model
    def create(self, vals):
        res = super(stock_quant, self).create(vals)
        self.update_stock_value()
        return res

2 个答案:

答案 0 :(得分:2)

首先计算您不必调用的字段 该方法,因为它已经在 创建通话。并且在写入调用中也是如此,但前提是您更改了qty字段。

因此删除您刚刚第二次调用的create方法。

现在通过添加一些打印调用来确保您的方法被调用,如果 您不知道如何在IDE中使用调试。

确保将模块导入__init__文件中。

答案 1 :(得分:1)

只需像这样更改您的创建功能

@api.model
def create(self, vals):
    res = super(stock_quant, self).create(vals)
    res.update_stock_value()
    return res