Se rendre au contenu

Champs de domaine dans Odoo : Un guide complet

Comprenez comment fonctionne le type de champ Domaine dans Odoo, où il apparaît et comment l'utiliser dans votre modèle de données et vos personnalisations.
6 mars 2026 par
Champs de domaine dans Odoo : Un guide complet
Dasolo
| Aucun commentaire pour l'instant

Si vous avez passé du temps à configurer Odoo, vous êtes probablement tombé sur des expressions de domaine. Ces conditions de filtre remplies de crochets apparaissent dans les boutons d'action, les règles automatisées, les règles d'enregistrement et les modèles d'e-mail à travers la plateforme. Mais moins de gens réalisent qu'Odoo fournit également un type de champ Domaine dans son ORM, conçu spécifiquement pour stocker et afficher ces expressions sous forme de données structurées.


Comprendre les champs de domaine est important que vous soyez un développeur Odoo construisant des modules personnalisés ou un utilisateur commercial configurant des flux de travail automatisés. Ce guide couvre tout, de ce qu'un champ de domaine stocke réellement à des exemples pratiques, des conseils de développement et les erreurs les plus courantes à éviter.

Quel est le champ Domaine dans Odoo


Dans Odoo, un domaine est une liste de conditions de filtre utilisées pour interroger des enregistrements. Il suit une syntaxe spécifique utilisant des tuples et des opérateurs logiques, et il correspond directement aux clauses WHERE SQL lorsque Odoo exécute une requête de base de données.

Une expression de domaine typique ressemble à ceci :


[('customer_rank', '>', 0), ('active', '=', True)]

Cela se traduit par : retourner tous les enregistrements où customer_rank est supérieur à 0 ET active est vrai.


Le champ Domaine (fields.Domain) est un type de champ dans l'ORM Odoo qui stocke ces expressions sous forme de données structurées à l'intérieur d'un enregistrement. Contrairement à un champ de texte simple, il est livré avec une validation intégrée et un widget UI dédié qui permet aux utilisateurs de construire visuellement des conditions de filtre, sans écrire de code.


Comment cela apparaît dans l'interface

Dans l'interface Odoo, un champ Domaine se rend par défaut à l'aide du widget éditeur de domaine. Ce widget présente un constructeur de règles visuel où les utilisateurs peuvent choisir un champ, sélectionner un opérateur (égal, contient, supérieur à, etc.) et entrer une valeur. C'est la même interface que vous voyez lors de la configuration des règles d'accès ou des critères de filtre dans les actions automatisées.


Dans la base de données, les valeurs de domaine sont stockées sous forme de texte brut, spécifiquement comme la représentation sous forme de chaîne d'une liste Python. Le type de champ gère la sérialisation et la validation de manière transparente, de sorte que les développeurs travaillent avec des valeurs de domaine propres en Python tandis que la couche de stockage s'occupe du reste.

C'est une partie de la conception plus large du modèle de données Odoo : les champs ne sont pas seulement des conteneurs de stockage. Ils portent une signification sémantique, un comportement UI et une logique de validation ensemble dans une seule définition.

Comment fonctionne le champ


Le champ Domaine s'intègre étroitement avec l'ORM Odoo et le système de filtrage des enregistrements. Voici ce qui se passe en coulisses lorsque vous enregistrez et évaluez un domaine.


Stockage et représentation

Lorsqu'un domaine est enregistré dans la base de données, Odoo le stocke sous forme de chaîne sérialisée. Un domaine restreignant les enregistrements à l'état brouillon pour l'utilisateur actuel est stocké comme une valeur texte qu'Odoo évalue au moment de la requête. La variable spéciale uid est résolue en l'ID de l'utilisateur actuel à l'exécution, rendant le filtrage dynamique possible sans coder en dur des valeurs.

L'ORM Odoo prend cette chaîne, l'évalue en toute sécurité et la convertit en une clause WHERE SQL. Cette évaluation se fait via safe_eval, qui prend en charge un sous-ensemble contrôlé d'expressions Python ainsi que des variables de contexte spécifiques à Odoo.


Le widget de domaine

Dans l'interface Odoo, les champs de type fields.Domain utilisent le widget de domaine par défaut. Ce widget présente le constructeur de filtres que vous voyez dans de nombreuses parties d'Odoo. Les utilisateurs peuvent ajouter des conditions, les combiner avec une logique ET ou OU, et prévisualiser les résultats sans toucher à aucun code.

Le widget est ce qui rend les champs de domaine véritablement accessibles aux utilisateurs métiers. Vous n'avez pas besoin de comprendre la syntaxe de domaine pour configurer un filtre. Le constructeur visuel gère la traduction pour vous.


Contexte du modèle

Un champ de domaine peut être lié à un modèle spécifique, ce qui indique à Odoo quels champs proposer dans le constructeur de domaine. Vous définissez cela via l'attribut model_field dans la définition du champ. Sans contexte de modèle, le widget de domaine revient à une entrée de texte simple, ce qui est beaucoup moins utile pour les utilisateurs finaux.


Cette liaison de contexte est une partie essentielle de la manière dont le cadre Odoo connecte les définitions de champs au comportement de l'interface utilisateur. Le champ connaît le modèle qu'il filtre, et l'interface s'adapte en conséquence.


Interaction avec d'autres enregistrements

Les champs de domaine sont souvent utilisés aux côtés de champs relationnels pour restreindre quels enregistrements apparaissent dans un menu déroulant Many2one, pour définir quels enregistrements une action automatisée cible, ou pour définir le périmètre d'un rapport ou d'un tableau de bord. L'expression de domaine agit comme un filtre en direct appliqué au niveau de l'ORM, ce qui signifie qu'elle respecte les règles de sécurité d'Odoo et les contrôles d'accès aux champs.

Cas d'utilisation commerciale


Les champs de domaine apparaissent dans pratiquement tous les modules Odoo. Voici cinq exemples concrets qui montrent comment ils pilotent des flux de travail commerciaux pratiques.


1. Actions automatisées et déclencheurs d'e-mail

Lorsque vous configurez une action automatisée dans Odoo (Paramètres > Technique > Automatisation), vous définissez un domaine pour spécifier quels enregistrements déclenchent l'action. Par exemple, un e-mail automatisé pour les factures en retard pourrait cibler uniquement les factures publiées qui sont impayées et dépassées. Ce domaine est stocké directement sur le modèle base.automation dans un champ de domaine appelé filter_domain. L'action ne se déclenche que pour les enregistrements qui correspondent.


2. Règles d'enregistrement et contrôle d'accès

Les règles de sécurité des enregistrements d'Odoo utilisent des champs de domaine pour restreindre quels enregistrements un groupe d'utilisateurs peut voir ou modifier. Une règle d'équipe de vente pourrait limiter la visibilité aux enregistrements assignés à l'équipe de l'utilisateur actuel, évaluée au moment de la requête. Cela vous donne une sécurité au niveau des lignes sans écrire de code personnalisé. Chaque filtre sur chaque règle d'enregistrement dans Odoo est une expression de domaine stockée dans un champ de domaine.


3. Filtrage des stocks et des opérations

Dans la gestion des entrepôts et des stocks, les actions programmées et les règles de réapprovisionnement utilisent des domaines pour cibler des catégories de produits spécifiques, des emplacements ou des niveaux de stock. Une action de réapprovisionnement automatisée peut être limitée aux produits stockables avec une quantité disponible à ou en dessous d'un point de réapprovisionnement, empêchant un traitement inutile à travers des milliers d'enregistrements.


4. Pipeline CRM et qualification des leads

Dans le module CRM, l'automatisation des étapes du pipeline, les règles d'activité et l'attribution des leads reposent toutes sur des expressions de domaine pour catégoriser et qualifier les leads. Les règles d'attribution de leads personnalisées utilisent des domaines pour faire correspondre les leads au bon commercial en fonction du pays, de l'industrie ou de la taille de l'affaire. Le champ de domaine est ce qui rend ces règles configurables depuis l'interface plutôt que d'exiger des modifications de code pour chaque nouveau scénario.


5. Dropdowns Many2one dynamiques

Dans les formulaires personnalisés, un domaine appliqué à un champ Many2one contrôle quels enregistrements apparaissent dans le menu déroulant. Restreindre un champ fournisseur pour n'afficher que les fournisseurs actifs avec un classement fournisseur non nul crée des expériences utilisateur plus ciblées et réduit les erreurs de saisie. Le domaine peut même être dynamique, faisant référence à des valeurs d'autres champs sur le même formulaire, ce qui fait que les options disponibles changent en fonction des sélections de l'utilisateur.

Créer ou personnaliser le champ


Il existe deux approches principales pour travailler avec les champs de domaine dans Odoo : utiliser Odoo Studio pour une personnalisation sans code, ou écrire du Python et du XML dans un module personnalisé.


Utilisation d'Odoo Studio

Odoo Studio n'expose actuellement pas de type de champ Domain autonome dans son créateur de champs visuel. Pour la plupart des besoins de configuration d'entreprise, vous n'en avez pas besoin. Les éditeurs de domaine existants intégrés aux actions automatisées, aux règles d'enregistrement et aux actions serveur vous offrent le constructeur de domaine visuel sans nécessiter un champ personnalisé.

Si vous souhaitez ajouter un filtre de domaine à un champ Many2one sur un formulaire, vous pouvez le faire dans Studio en modifiant les propriétés du champ et en entrant une expression de domaine directement. Studio valide la syntaxe du domaine et l'enregistre dans la définition de la vue.


Personnalisation technique en Python

Dans un module Odoo personnalisé, ajouter un champ Domain est une partie simple du guide de développement Odoo standard. Voici un exemple de base utilisant l'ORM :

from odoo import models, fields

class MyModel(models.Model):
    _name = 'my.model'

    model_name = fields.Char(default='res.partner')
    filter_domain = fields.Domain(
        string='Filter Domain',
        model_field='model_name',
        help='Expression de domaine pour filtrer les enregistrements de partenaires'
    )

L'attribut model_field relie l'éditeur de domaine au nom du modèle stocké dans model_name. Cela indique au widget de domaine quels champs proposer dans le constructeur visuel. Garder le nom du modèle dans un champ séparé permet également une sélection dynamique du modèle si votre cas d'utilisation l'exige.


Ajouter le widget à une vue de formulaire

Pour afficher le constructeur de domaine dans une vue de formulaire, référencez à la fois le champ modèle et le champ domaine dans le XML de la vue :


<field name="model_name" invisible="1"/>
<field name="filter_domain" widget="domain"
       options="{'model': 'model_name'}"/>

Sans la déclaration widget="domain" et l'option modèle, le champ s'affiche comme du texte brut. Incluez toujours les deux lors de la création de formulaires qui exposent la configuration du domaine aux utilisateurs.


Écrire des valeurs de domaine via l'API XML-RPC

Si vous définissez des valeurs de champ de domaine par programmation via l'API, passez toujours la valeur sous forme de chaîne :

models.execute_kw(db, uid, api_key, 'my.model', 'write',
    [[record_id], {
        'filter_domain': "[('active', '=', True)]"
    }]
)

Passer un objet liste Python au lieu d'une chaîne est une erreur courante qui provoque des erreurs ou des échecs silencieux selon la version d'Odoo. Sérialisez toujours votre domaine en une chaîne avant de l'écrire via l'API.

Meilleures pratiques


Ces habitudes pratiques vous feront gagner du temps et éviteront des problèmes lors du travail avec des champs de domaine dans Odoo.


Validez la syntaxe du domaine avant de déployer

Une expression de domaine invalide génère des erreurs au moment où Odoo essaie de l'évaluer. Testez vos domaines dans la barre de recherche Odoo ou en mode développeur avant de les enregistrer dans des actions automatisées ou des règles d'enregistrement. Un appel rapide search_count via l'API est également un moyen fiable de confirmer qu'un domaine renvoie le nombre de dossiers attendu.


Utilisez des variables dynamiques lorsque cela est possible

Évitez de coder en dur les identifiants d'utilisateur, les identifiants d'entreprise ou les dates dans les expressions de domaine. Utilisez des variables dynamiques comme uid, context_today() et current_company_id à la place. Cela rend vos domaines portables et évite les pannes silencieuses lorsque les enregistrements changent entre les environnements.


Toujours lier le contexte du modèle

Lors de l'ajout d'un champ de domaine à un modèle personnalisé, définissez toujours l'attribut model_field et incluez-le dans la vue. Sans cela, les utilisateurs voient un champ de texte brut au lieu du constructeur de domaine visuel, ce qui réduit l'utilisabilité et augmente le risque que des valeurs invalides soient enregistrées.


Gardez les domaines lisibles

Les domaines imbriqués complexes utilisant les opérateurs | (OU) et & (ET) peuvent devenir difficiles à lire et à maintenir. Ajoutez des commentaires dans votre code Python expliquant l'intention derrière chaque domaine. Si un domaine devient très complexe, envisagez si une action serveur ou un champ calculé serait plus clair et plus facile à tester.


Utilisez safe_eval pour l'évaluation programmatique

Lors de l'évaluation de chaînes de domaine dans le code Python, par exemple à l'intérieur d'une action serveur ou d'une action automatisée, utilisez safe_eval intégré à Odoo plutôt que eval natif de Python. C'est plus sûr, gère correctement les variables de contexte spécifiques à Odoo et est cohérent avec la façon dont Odoo évalue les domaines en interne.


Testez avec des données réalistes

Vérifiez toujours que votre domaine correspond aux enregistrements attendus avant de passer en production. Cela est particulièrement important pour les actions automatisées et les règles d'enregistrement, où un filtre incorrect peut traiter les mauvais enregistrements ou bloquer l'accès des utilisateurs sans aucun avertissement visible.

Pièges courants


Voici les erreurs qui surviennent le plus souvent lors du travail avec des champs de domaine dans Odoo, et comment les éviter.


Confondre le type de champ avec la syntaxe de domaine

Le mot "domaine" a deux significations différentes dans Odoo. Il fait référence à la syntaxe de filtre (une liste de tuples), et il fait également référence à fields.Domain, un type de champ ORM spécifique qui stocke ces expressions en tant que données. Les nouveaux venus dans la personnalisation d'Odoo mélangent souvent les deux. Un champ Domaine est un conteneur de stockage. L'expression de domaine est la logique de filtre à l'intérieur.


Passer une liste au lieu d'une chaîne via l'API

Lors de l'écriture dans un champ Domaine via XML-RPC, vous devez passer une chaîne, et non un objet liste Python. Passer le domaine sous forme de liste brute provoquera une erreur de type ou un échec silencieux selon la version d'Odoo. Toujours sérialiser votre domaine en une chaîne avant de l'écrire via l'API.


Contexte de modèle manquant sur le widget

Si vous ajoutez un champ Domaine à une vue de formulaire sans spécifier le contexte du modèle dans les options du widget, les utilisateurs verront un champ de texte brut plutôt que le constructeur de domaine visuel. Le constructeur de domaine n'apparaît que lorsque le widget sait quel modèle référencer. Incluez toujours le lien model_field dans votre définition de vue.


Codage en dur des ID d'enregistrement dans les domaines

Les domaines qui référencent directement des ID d'enregistrement spécifiques échouent silencieusement lorsque ces enregistrements sont supprimés ou lorsque vous copiez la configuration dans une nouvelle base de données. Utilisez des références dynamiques comme uid ou des recherches relationnelles chaque fois que possible pour garder vos domaines portables.


Domaines de règles d'enregistrement trop larges ou restrictifs

Un domaine de règle d'enregistrement qui est trop permissif peut exposer des enregistrements à des utilisateurs qui ne devraient pas les voir. Un domaine trop restrictif peut silencieusement cacher des enregistrements sans aucune explication à l'utilisateur. Testez toujours les domaines de règles d'enregistrement du point de vue du groupe d'utilisateurs cible, et non du compte administrateur qui contourne toutes les règles.


Oublier les enregistrements archivés

Par défaut, Odoo exclut les enregistrements archivés (où active = False) des résultats de recherche. Si votre domaine ne prend pas cela en compte, vous pourriez obtenir des lacunes inattendues dans vos données. Ajoutez ('active', 'in', [True, False]) lorsque vous devez inclure des enregistrements archivés dans les résultats du filtre.

Conclusion


Les champs Domaine sont l'un de ces éléments de base qui alimentent discrètement une grande partie du fonctionnement d'Odoo. Du contrôle d'accès et des actions automatisées aux listes déroulantes dynamiques et aux filtres de tableau de bord, les expressions de domaine sont la colonne vertébrale du filtrage des enregistrements dans Odoo, et le type fields.Domain offre aux développeurs un moyen propre et validé de stocker et de présenter cette logique directement dans le modèle de données Odoo.


Pour les utilisateurs professionnels, le widget de domaine rend la configuration des filtres accessible sans aucune ligne de code. Pour les développeurs, le type de champ Domaine apporte de la clarté aux définitions de modèle qui dépendaient auparavant de champs Char génériques avec un remplacement de widget. Que vous travailliez dans Odoo Studio, que vous écriviez un module Python personnalisé ou que vous configuriez des flux de travail automatisés depuis l'interface, comprendre comment fonctionnent les champs de domaine ouvre un large éventail de possibilités.


Les concepts abordés dans ce guide s'appliquent à toutes les versions et modules d'Odoo. Le temps passé à comprendre les champs de domaine est un temps bien investi, car ils sont véritablement partout dans Odoo.


Besoin d'aide pour votre mise en œuvre d'Odoo ?

Dasolo aide les entreprises à mettre en œuvre, personnaliser et optimiser Odoo pour leurs besoins commerciaux spécifiques. Que vous soyez en train de configurer des flux de travail automatisés, de créer des modules personnalisés ou d'essayer de tirer le meilleur parti de votre configuration Odoo existante, notre équipe a la profondeur technique nécessaire pour vous aider à avancer avec confiance.

Si vous avez des questions sur les champs Domaine ou tout autre aspect de votre mise en œuvre d'Odoo, contactez-nous . Nous serons ravis de jeter un œil à votre configuration et de vous orienter dans la bonne direction.

Champs de domaine dans Odoo : Un guide complet
Dasolo 6 mars 2026
Partager cet article
Se connecter pour laisser un commentaire.