Se rendre au contenu
Odoo Menu
  • Se connecter
  • Essai gratuit
  • Applications
    Finance
    • Comptabilité
    • Facturation
    • Notes de frais
    • Feuilles de calcul (BI)
    • Documents
    • Signature
    Ventes
    • CRM
    • Ventes
    • PdV Boutique
    • PdV Restaurant
    • Abonnements
    • Location
    Sites web
    • Site Web
    • eCommerce
    • Blog
    • Forum
    • Live Chat
    • eLearning
    Chaîne d'approvisionnement
    • Inventaire
    • Fabrication
    • PLM
    • Achats
    • Maintenance
    • Qualité
    Ressources Humaines
    • Employés
    • Recrutement
    • Congés
    • Évaluations
    • Recommandations
    • Parc automobile
    Marketing
    • Marketing Social
    • E-mail Marketing
    • SMS Marketing
    • Événements
    • Marketing Automation
    • Sondages
    Services
    • Projet
    • Feuilles de temps
    • Services sur Site
    • Assistance
    • Planification
    • Rendez-vous
    Productivité
    • Discussion
    • Validations
    • Internet des Objets
    • VoIP
    • Connaissances
    • WhatsApp
    Applications tierces Odoo Studio Plateforme Cloud d'Odoo
  • Industries
    Commerce de détail
    • Librairie
    • Magasin de vêtements
    • Magasin de meubles
    • Épicerie
    • Quincaillerie
    • Magasin de jouets
    Food & Hospitality
    • Bar et Pub
    • Restaurant
    • Fast-food
    • Maison d’hôtes
    • Distributeur de boissons
    • Hôtel
    Immobilier
    • Agence immobilière
    • Cabinet d'architecture
    • Construction
    • Gestion immobilière
    • Jardinage
    • Association de copropriétaires
    Consultance
    • Cabinet d'expertise comptable
    • Partenaire Odoo
    • Agence Marketing
    • Cabinet d'avocats
    • Aquisition de talents
    • Audit & Certification
    Fabrication
    • Textile
    • Métal
    • Meubles
    • Alimentation
    • Brewery
    • Cadeaux d'entreprise
    Santé & Fitness
    • Club de sports
    • Opticien
    • Salle de fitness
    • Praticiens bien-être
    • Pharmacie
    • Salon de coiffure
    Trades
    • Bricoleur
    • Matériel informatique et support
    • Systèmes photovoltaïques
    • Cordonnier
    • Services de nettoyage
    • Services CVC
    Autres
    • Organisation à but non lucratif
    • Agence environnementale
    • Location de panneaux d'affichage
    • Photographie
    • Leasing de vélos
    • Revendeur de logiciel
    Browse all Industries
  • Communauté
    Apprenez
    • Tutoriels
    • Documentation
    • Certifications
    • Formation
    • Blog
    • Podcast
    Renforcer l'éducation
    • Programme éducatif
    • Business Game Scale-Up!
    • Rendez-nous visite
    Obtenir le logiciel
    • Téléchargement
    • Comparez les éditions
    • Versions
    Collaborer
    • Github
    • Forum
    • Événements
    • Traductions
    • Devenez partenaire
    • Services for Partners
    • Enregistrer votre cabinet comptable
    Nos Services
    • Trouver un partenaire
    • Trouver un comptable
    • Rencontrer un conseiller
    • Services de mise en œuvre
    • Références clients
    • Assistance
    • Mises à niveau
    Github Youtube Twitter Linkedin Instagram Facebook Spotify
    +1 (650) 691-3277
    Obtenir une démonstration
  • Tarification
  • Aide

Odoo is the world's easiest all-in-one management software.
It includes hundreds of business apps:

  • CRM
  • e-Commerce
  • Comptabilité
  • Inventaire
  • PoS
  • Projet
  • MRP
All apps
Vous devez être inscrit pour interagir avec la communauté.
Toutes les publications Personnes Badges
Étiquettes (Voir toutl)
odoo accounting v14 pos v15
À propos de ce forum
Vous devez être inscrit pour interagir avec la communauté.
Toutes les publications Personnes Badges
Étiquettes (Voir toutl)
odoo accounting v14 pos v15
À propos de ce forum
Aide

@api.onchange Issue: One Onchange Triggers Another Indirectly, Causing Domain Inconsistencies

S'inscrire

Recevez une notification lorsqu'il y a de l'activité sur ce poste

Cette question a été signalée
onchangedomain_filterodoo18
2 Réponses
1207 Vues
Avatar
Dishant Mistry

Hi everyone,

I’m facing an issue with multiple @api.onchange methods where one onchange indirectly triggers another due to a field update inside it. This leads to unexpected behavior in domain filtering.

Let’s say I have two onchange methods:

@api.onchange('field_a') def onchange_a(self): self.domain_field = some_logic_based_on_a @api.onchange('field_b') def onchange_b(self): self.field_a = False # This triggers onchange_a again self.domain_field = some_logic_based_on_b

The problem is that when field_b changes, it updates field_a, which re-triggers onchange_a, and this overwrites the domain logic set by onchange_b.

As a result, the final domain on domain_field becomes inconsistent or incorrect, depending on which onchange executes last.


In complex forms where multiple fields influence a shared domain or selection field, this kind of chained onchange can cause:

  • Unintended overrides of previous logic.
  • Incorrect domain being applied.
  • Confusing user experience on the form.


What’s the best way to handle such cases in Odoo?

  • Is there a way to control or prevent re-triggering another onchange when setting a field inside one?
  • Any alternative way to achieve that things  
  • Any better practice to manage interdependent fields without causing these side-effects?

Thanks in advance for any advice!

0
Avatar
Ignorer
Avatar
D Enterprise
Meilleure réponse

Hii,

Here is updated code 
from odoo import models, fields, api


class MyModel(models.Model):

    _name = 'my.model'

    _description = 'My Model'


    field_a = fields.Many2one('res.partner', string='Field A')

    field_b = fields.Many2one('res.partner.category', string='Field B')

    domain_field = fields.Many2one('product.product', string='Domain Field')


    @api.onchange('field_a', 'field_b')

    def _onchange_field_a_b(self):

        """Centralized onchange handler to avoid chained effects."""

        domain = []


        if self.field_b:

            # Priority: field_b logic

            self.field_a = False  # Reset A if B is selected

            domain = [('categ_id', '=', record.field_a.id)], limit=1)

            else:

                record.domain_field = False


    domain_field = fields.Many2one('product.product', string='Domain Field', compute='_compute_domain_field', store=True)


i hope it is usefull

0
Avatar
Ignorer
Avatar
Savya Sachin
Meilleure réponse

Hi Dishant, 
Try using computed fields for such interdependencies instead of multiple onchange functions,

@api.depends('field_a', 'field_b')
def _compute_domain_field(self):
    for record in self:
        if record.field_b:
            record.domain_field = some_logic_based_on_b
        elif record.field_a:
            record.domain_field = some_logic_based_on_a
        else:
            record.domain_field = False

domain_field = fields.Char(compute='_compute_domain_field', store=True)

@api.onchange('field_b')
def onchange_b(self):
    if self.field_b:
        self.field_a = False

Thanks

0
Avatar
Ignorer
Vous appréciez la discussion ? Ne vous contentez pas de lire, rejoignez-nous !

Créez un compte dès aujourd'hui pour profiter de fonctionnalités exclusives et échanger avec notre formidable communauté !

S'inscrire
Publications associées Réponses Vues Activité
Dynamic domain with Onchange doesn't show value when creating
domain onchange domain_filter
Avatar
Avatar
Avatar
Avatar
3
mai 24
6567
Onchange apply domain when editing records
v8 onchange domain_filter
Avatar
Avatar
Avatar
3
août 23
7733
How to give Domain filter for one2many field base on the condition of another field? (Odoo 13) Résolu
many2one one2many onchange domain_filter
Avatar
Avatar
2
juil. 22
12714
POS order line custom field (serial_id) not synced to backend after payment (Odoo 18)
odoo18
Avatar
Avatar
1
nov. 25
516
Auto Session time out for users ODOO 18
odoo18
Avatar
Avatar
Avatar
2
sept. 25
3287
Communauté
  • Tutoriels
  • Documentation
  • Forum
Open Source
  • Téléchargement
  • Github
  • Runbot
  • Traductions
Services
  • Hébergement Odoo.sh
  • Assistance
  • Migration
  • Développements personnalisés
  • Éducation
  • Trouver un comptable
  • Trouver un partenaire
  • Devenez partenaire
À propos
  • Notre société
  • Actifs de la marque
  • Contactez-nous
  • Emplois
  • Événements
  • Podcast
  • Blog
  • Clients
  • Informations légales • Confidentialité
  • Sécurité.
الْعَرَبيّة Català 简体中文 繁體中文 (台灣) Čeština Dansk Nederlands English Suomi Français Deutsch हिंदी Bahasa Indonesia Italiano 日本語 한국어 (KR) Lietuvių kalba Język polski Português (BR) română русский язык Slovenský jazyk slovenščina Español (América Latina) Español ภาษาไทย Türkçe українська Tiếng Việt

Odoo est une suite d'applications open source couvrant tous les besoins de votre entreprise : CRM, eCommerce, Comptabilité, Inventaire, Point de Vente, Gestion de Projet, etc.

Le positionnement unique d'Odoo est d'être à la fois très facile à utiliser et totalement intégré.

Website made with

Odoo Experience on YouTube

1. Use the live chat to ask your questions.
2. The operator answers within a few minutes.

Live support on Youtube
Watch now