Я пытаюсь добавить некоторые функции в существующий метод onchange. Этот объявлен в v7, и я хочу использовать v8. Метод onchange_product_id
модели stock.move
.
Итак, я объявил свой метод onchange v8 (с тем же именем, что и у метода v7, который я хочу перезаписать). Я также повторно объявил затронутое поле product_id
, потому что в противном случае мой метод onchange не вызывается (в переопределении я установил только имя сомодели, поскольку ожидается, что остальные атрибуты будут получены из исходного объявления).
Это мой код:
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
Теперь проблема: я даже не вижу сообщения журнала, потому что получаю эту ошибку:
TypeError: объект «NoneType» не может быть вызван
Если я изменю декоратор @api.v8 и напишу вместо него @api.v7, я получу сообщение об ошибке, запрашивающее дополнительные аргументы в определении метода onchange.
Я также попытался заменить поле product_id
в представлении XML, чтобы избежать вызова метода onchange с несколькими параметрами, но результат был тот же:
<field name="product_id" position="replace">
<field name="product_id"/>
</field>
Старый XML-вызов метода таков:
<field name="product_id" on_change="onchange_product_id(product_id,location_id,location_dest_id, parent.partner_id)"/>
Кто-нибудь может мне помочь? Я нашел несколько вопросов, связанных с этим, в SO, но ответ не помог мне в этом случае.
Примечание. Я не хочу избегать Super
и переводить весь код старого метода onchange в новый API. Это должен быть лучший способ управлять этим. Не так ли?