如何使用新API覆盖v7 onchange方法?

时间:2016-10-17 16:01:38

标签: xml python-2.7 openerp odoo-8

我正在尝试为现有的onchange方法添加一些功能。这个是在v7中声明的,我想使用v8。该方法是模型onchange_product_id的{​​{1}}。

所以我已经声明了我的v8 onchange方法(与我要覆盖的v7方法的名称相同)。我还重新声明了受影响的字段stock.move,因为如果没有,我的onchange方法不会被调用(在重定义中我只设置了comodel名称,因为它需要从其中获取其余的属性)原始声明)。

这是我的代码:

product_id

现在,问题是:我甚至没有看到日志消息,因为我收到此错误:

  

TypeError:'NoneType'对象不可调用

如果我修改了装饰器@ api.v8而我写了@ api.v7,我得到错误,要求在onchange方法的定义中有更多的参数。

我还尝试替换XML视图中的product_id = fields.Many2one( comodel_name='product.product', ) @api.v8 @api.onchange('product_id') def onchange_product_id(self): _logger.info('*' * 80) self.ensure_one() result = super(StockMove, self).onchange_product_id( self.product_id, self.location_id, self.location_dest_id, self.picking_id.partner_id) return result 字段,以避免使用多个参数调用onchange方法,但结果是相同的:

product_id

该方法的旧XML调用是这样的:

<field name="product_id" position="replace">
    <field name="product_id"/>
</field>

有人可以帮帮我吗?我在SO中发现了几个与此相关的问题,但没有回应帮助我解决这个问题。

注意:我不想避免使用<field name="product_id" on_change="onchange_product_id(product_id,location_id,location_dest_id, parent.partner_id)"/> 并将旧的onchange方法的所有代码转换为新的API。它必须是一种更好的方法来管理它。不是吗?

1 个答案:

答案 0 :(得分:1)

应该是:

multi

装饰器cr将封装参数uididscontext和{{1}},因此您将需要所有其他参数。也许你会在最后一个参数上需要一些默认值,但我不知道原始方法,所以我无法告诉你。