Чтобы остановить событие onchangeбазового кода в Odoo, вы можете использовать различные методы в зависимости от конкретного сценария. Вот несколько возможных подходов:
- Переопределить метод
onchange:
В Odoo вы можете создать собственный модуль, который расширяет целевую модель и переопределяет методonchangeпустым выполнение. Это фактически отключит логикуonchangeбазового кода. Вот пример:
from odoo import models
class CustomModel(models.Model):
_inherit = 'target.model'
@api.onchange('field_name')
def onchange_field_name(self):
# Custom logic here, or leave it empty to disable the base code's onchange event
pass
- Удалите атрибут
onchange.
Другой подход — удалить атрибутonchangeиз определения поля. Это можно сделать, расширив целевое представление и удалив атрибут из определения поля. Вот пример:
<record id="custom_view_id" model="ir.ui.view">
<field name="name">custom.view</field>
<field name="model">target.model</field>
<field name="inherit_id" ref="base_view_id"/>
<field name="arch" type="xml">
<field name="field_name" position="attributes">
<attribute name="onchange" eval="False"/>
</field>
</field>
</record>
- Используйте флаг для управления выполнением.
Вы можете ввести переменную флага для управления выполнением событияonchangeбазового кода. Установив флаг, вы можете условно включить или отключить событие. Вот пример:
from odoo import models, fields
class CustomModel(models.Model):
_inherit = 'target.model'
enable_onchange = fields.Boolean(default=True)
@api.onchange('field_name')
def onchange_field_name(self):
if self.enable_onchange:
# Base code's onchange logic here
pass