我正在尝试为现有的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。它必须是一种更好的方法来管理它。不是吗?
答案 0 :(得分:1)
应该是:
multi
装饰器cr
将封装参数uid
,ids
,context
和{{1}},因此您将需要所有其他参数。也许你会在最后一个参数上需要一些默认值,但我不知道原始方法,所以我无法告诉你。