Introduction
Le champ Booléen est l'un des types de champs les plus simples dans Odoo, et aussi l'un des plus utilisés. Chaque fois que vous cochez une case sur un bon de commande, marquez un client comme actif ou signalez un produit comme favori, vous interagissez avec un champ Booléen.
Malgré sa simplicité, le champ Booléen a quelques comportements qu'il vaut la peine de comprendre correctement. Savoir quand l'utiliser, quand ne pas l'utiliser et comment le configurer correctement vous aidera à construire des environnements Odoo plus propres et à éviter certaines erreurs courantes que même des équipes expérimentées commettent.
Ce guide couvre le champ Booléen sous tous ses angles : ce qu'il stocke, comment il se comporte dans le modèle de données Odoo et l'interface utilisateur, comment le créer ou le personnaliser en utilisant Odoo Studio ou Python, des cas d'utilisation réels en entreprise et des conseils pratiques pour tirer le meilleur parti de ce type de champ.
Qu'est-ce que le champ Booléen dans Odoo
Dans l'ORM Odoo, le champ Booléen stocke l'une des deux valeurs : True ou False. Il correspond directement à une colonne BOOLEAN dans PostgreSQL. Il n'y a pas d'ambiguïté ici : le champ est soit coché, soit décoché, activé ou désactivé, oui ou non.
Du point de vue de l'utilisateur, un champ Booléen apparaît comme une case à cocher dans les vues de formulaire. Dans les vues de liste, il s'affiche généralement comme une icône de coche lorsque la valeur est True et rien lorsque c'est False. Dans certaines configurations, il apparaît comme un interrupteur à bascule au lieu d'une case à cocher traditionnelle, selon le widget appliqué.
Voici à quoi ressemble la définition d'un champ Booléen dans un module Python Odoo :
from odoo import fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
needs_manual_review = fields.Boolean(
string='Besoin d'une révision manuelle',
default=False,
)
Le paramètre string définit l'étiquette affichée dans l'interface. Le paramètre default contrôle la valeur initiale lors de la création de nouveaux enregistrements. Sans valeur par défaut, Odoo traite le champ comme False automatiquement, mais il est considéré comme une bonne pratique de le déclarer explicitement.
Dans Odoo Studio, ce même type de champ est simplement appelé une case à cocher. Les champs créés via Studio reçoivent automatiquement un préfixe x_studio_. Lorsqu'ils sont créés via Python ou l'API XML-RPC, vous définissez vous-même le nom technique.
Comment fonctionne le champ
Lorsque vous ajoutez un champ Booléen à un modèle Odoo, le framework crée automatiquement la colonne correspondante dans la base de données PostgreSQL lors de l'installation ou de la mise à niveau du module. Aucune migration SQL manuelle n'est nécessaire.
Une chose importante à comprendre : dans Odoo, un champ Booléen ne contient jamais None ou NULL. L'ORM renvoie toujours soit True, soit False. Même si la colonne de la base de données n'a pas de valeur, Odoo renverra False lorsque vous lirez le champ. Cela diffère des autres types de champs comme Many2one ou Char, où une valeur vide revient comme False ou None et vous devez vérifier les deux.
Attributs clés du champ
Voici les principales propriétés que vous pouvez configurer sur un champ Booléen dans le framework Odoo :
- default : Définit la valeur lors de la création d'un nouvel enregistrement. Presque toujours défini sur
False, mais peut êtreTruepour des scénarios d'opt-out. - compute : Lie une méthode Python qui calcule la valeur dynamiquement. Utile pour des indicateurs dérivés basés sur l'état d'autres champs.
- store : Lorsqu'il est utilisé avec
compute, détermine si la valeur est enregistrée dans la base de données. Avecstore=True, les champs Booléens calculés peuvent être utilisés dans des filtres de recherche et des rapports. - readonly: Empêche les utilisateurs de modifier manuellement la valeur du champ dans l'interface. Courant pour les indicateurs calculés qui ne doivent être définis que par le système.
- copy: Contrôle si la valeur du champ est transférée lors de la duplication d'un enregistrement. Par défaut, c'est
True. Pour des indicateurs comme "est approuvé", vous souhaitez généralementcopy=Falseafin que les enregistrements dupliqués commencent à zéro. - groups: Restreint la visibilité et l'édition à des groupes d'utilisateurs spécifiques.
Comment cela apparaît dans les vues
Dans les vues de formulaire, un champ booléen s'affiche sous forme de case à cocher HTML standard. Dans les vues de liste, Odoo affiche une icône de coche pour True et rien pour False par défaut. Cela rend les vues de liste faciles à parcourir visuellement.
Vous pouvez changer la façon dont un champ booléen s'affiche en utilisant des widgets de vue. Le widget toggle l'affiche comme un interrupteur au lieu d'une case à cocher, ce qui fonctionne bien pour les paramètres ou les préférences. Pour un affichage en lecture seule, le widget boolean_favorite rend la valeur sous forme d'icône d'étoile, que vous pouvez voir sur les formulaires de produits et de contacts dans Odoo standard.
Utilisation des champs booléens dans les filtres de domaine
Les champs booléens sont très pratiques à utiliser dans les domaines Odoo, qui sont les expressions de filtre utilisées dans les vues de recherche, les actions automatisées et les règles d'accès. Un filtre pour les enregistrements non cochés ressemble à ceci :
[('needs_manual_review', '=', True)]
Comme il n'y a que deux valeurs possibles, vous pouvez également utiliser la forme plus simple sans l'opérateur :
[('needs_manual_review', '=', False)]
Ce comportement de filtrage simple est une des raisons pour lesquelles les champs booléens s'intègrent si bien avec les actions automatisées, les actions planifiées et les actions serveur d'Odoo. Ils sont faciles à vérifier et à agir sans conditions complexes.
Interaction avec l'ORM Odoo
Lire et écrire des champs Boolean dans le développement Odoo est aussi direct que possible. Vous accédez à la valeur sur l'objet d'enregistrement, la comparez avec True ou False, et l'assignez directement. L'ORM gère tout le reste. Il n'y a pas de conversions, pas de cas particuliers de sérialisation, et pas de surprises lors du passage de valeurs par l'API XML-RPC non plus, puisque True et False correspondent proprement à leurs équivalents boolean XML-RPC.
Cas d'utilisation en entreprise
Les champs Boolean apparaissent dans chaque département d'une mise en œuvre typique d'Odoo. Voici cinq exemples pratiques provenant de flux de travail réels.
CRM : Suivi de la qualification d'un lead
Les équipes de vente ont souvent besoin de signaler quels leads ont été examinés par un représentant senior et confirmés comme des opportunités viables. Un champ Boolean appelé is_qualified sur le modèle de lead CRM offre aux équipes un moyen facile de filtrer leur pipeline. Les leads non qualifiés peuvent être gérés par le personnel junior, tandis que ceux qualifiés reçoivent une attention prioritaire. Cette simple case à cocher remplace le besoin d'une étape dédiée ou d'un champ de statut juste pour cela.
Ventes : Signalement des commandes nécessitant une révision manuelle
Dans certaines entreprises, certaines commandes de vente nécessitent une approbation supplémentaire avant d'être confirmées, par exemple les commandes dépassant un certain montant ou pour de nouveaux clients. Un champ Boolean needs_manual_review sur la commande de vente, combiné à une action automatisée qui le définit sur True en fonction des règles commerciales, donne à l'équipe financière ou opérationnelle une file d'attente claire à partir de laquelle travailler. Ils peuvent filtrer la liste des commandes par ce champ et traiter les approbations sans fouiller dans la liste complète des commandes.
Inventaire : Marquer les produits comme hors catalogue
Lorsqu'un produit n'est plus vendu mais doit toujours rester dans le système pour des archives historiques, l'archivage n'est pas toujours la bonne option. Un champ Boolean is_discontinued sur le modèle de produit permet aux équipes d'achat et de vente de voir d'un coup d'œil que l'article ne doit pas être réapprovisionné ou proposé aux clients. Vous pouvez utiliser ce champ dans les filtres de liste de prix, les règles de validation des commandes d'achat et les paramètres de visibilité du magasin en ligne.
Comptabilité : Identifier les factures nécessitant une attention particulière
Les équipes financières doivent parfois signaler les factures qui ont été contestées, contiennent une divergence de prix ou attendent un avoir. Plutôt que de s'appuyer sur des notes en texte libre dans le fil de discussion, un champ Boolean under_dispute donne à l'équipe un moyen structuré de filtrer et de rendre compte de ces factures. Des rappels automatisés peuvent également être supprimés pour les factures avec ce drapeau défini sur True, évitant ainsi une pression de paiement inutile sur un client pendant qu'un problème est résolu.
RH : Suivi des certifications et de l'achèvement de la formation
Les départements RH doivent souvent confirmer que les employés ont terminé la formation obligatoire ou détiennent une certification requise. Un champ booléen dans le dossier de l'employé, tel que safety_training_completed, fournit un moyen simple et auditable de suivre cela. Les managers peuvent filtrer leur liste d'équipe pour voir qui doit encore terminer la formation, et les données peuvent alimenter des rapports de conformité sans construire un module dédié complexe.
Créer ou personnaliser le champ Booléen
Il existe trois approches principales pour ajouter un champ booléen à un modèle Odoo, en fonction de votre configuration technique et du niveau de personnalisation dont vous avez besoin.
Utiliser Odoo Studio (Sans Code)
Odoo Studio est l'outil intégré de low-code pour personnaliser Odoo sans écrire de Python ou XML. Pour ajouter un champ booléen via Studio :
- Ouvrez Odoo Studio depuis le menu principal (nécessite l'application Studio).
- Naviguez vers le formulaire où vous souhaitez ajouter le champ.
- Faites glisser un champ Checkbox depuis la barre latérale vers la mise en page du formulaire.
- Définissez l'étiquette, la valeur par défaut et toutes les contraintes requises ou en lecture seule dans le panneau des propriétés du champ.
- Enregistrez et fermez Studio.
Studio gère tout automatiquement : le champ est créé dans la base de données avec un préfixe x_studio_ et ajouté à la vue. Aucun redémarrage ou mise à niveau n'est requis.
Utiliser Python dans un Module Personnalisé
Pour les développeurs construisant des modules Odoo, les champs booléens sont définis directement dans les fichiers de modèle Python. C'est l'approche recommandée pour toute personnalisation qui doit être contrôlée par version, testée et déployée sur plusieurs environnements :
from odoo import fields, models
class ResPartner(models.Model):
_inherit = 'res.partner'
x_is_key_account = fields.Boolean(
string='Compte Clé',
default=False,
copy=False,
)
Après avoir défini le champ, vous l'ajoutez au fichier XML de la vue pertinente afin qu'il apparaisse dans l'interface. Odoo crée la colonne de base de données lorsque le module est installé ou mis à jour.
Pour les champs Boolean calculés, le modèle ressemble à ceci :
from odoo import api, fields, models
class SaleOrder(models.Model):
_inherit = 'sale.order'
is_high_value = fields.Boolean(
string='Commande de Haute Valeur',
compute='_compute_is_high_value',
store=True,
)
@api.depends('amount_total')
def _compute_is_high_value(self):
for order in self:
order.is_high_value = order.amount_total >= 10000
Avec store=True, la valeur calculée est enregistrée dans la base de données, la rendant disponible dans les filtres de recherche et le regroupement de la vue liste sans recalculer à chaque chargement de page.
Utilisation de l'API XML-RPC
Si vous gérez les personnalisations Odoo par programmation, par exemple dans le cadre d'un pipeline de déploiement ou d'un script de configuration à distance, les champs Boolean peuvent être créés via l'API XML-RPC sur le modèle ir.model.fields :
field_id = models.execute_kw(
ODOO_DB, uid, ODOO_API_KEY,
'ir.model.fields', 'create',
[{
'name': 'x_needs_manual_review',
'field_description': 'Nécessite une Révision Manuelle',
'model_id': model_id,
'ttype': 'boolean',
'state': 'manual',
}]
)
La valeur state: manual indique à Odoo que ce champ a été créé en dehors d'un module, ce qui est le paramètre correct pour les champs créés via Studio ou l'API. C'est exactement ainsi que Dasolo gère la création de champs à distance pour les clients dans le cadre de flux de travail de configuration automatisés.
Meilleures pratiques
1. Toujours définir une valeur par défaut
Bien qu'Odoo renvoie False pour les champs Boolean sans valeur par défaut, il est de bonne pratique de déclarer default=False explicitement dans votre définition de champ. Cela communique clairement l'intention à quiconque lit le code du modèle et évite toute ambiguïté lorsque le champ est utilisé dans des actions ou des filtres automatisés.
2. Utilisez des noms descriptifs qui se lisent comme des questions
Les noms de champs booléens fonctionnent mieux lorsqu'ils se lisent naturellement comme une question oui/non. Des noms comme is_verified, needs_approval, has_warranty ou is_key_account sont immédiatement compréhensibles. Évitez les noms vagues comme flag, status ou check, qui ne vous disent rien sur ce que le champ représente réellement.
3. Définissez copy=False pour les indicateurs d'approbation et de statut
Si votre champ booléen représente un état qui ne doit pas être transféré lorsqu'un enregistrement est dupliqué, par exemple "est approuvé" ou "a été envoyé", ajoutez toujours copy=False. Sinon, la duplication d'un enregistrement copiera la valeur de l'indicateur, ce qui peut entraîner l'apparition d'enregistrements approuvés ou envoyés alors qu'ils n'ont pas suivi le processus approprié.
4. Utilisez des champs booléens calculés pour les états dérivés
Évitez d'écrire des actions serveur ou du code Python qui mettent à jour manuellement un champ booléen en réponse à d'autres changements de champ. Au lieu de cela, définissez-le comme un champ calculé avec @api.depends(). Cela garde votre logique en un seul endroit, s'exécute automatiquement à chaque sauvegarde et est beaucoup plus facile à maintenir et à déboguer que des opérations d'écriture dispersées dans plusieurs endroits du code.
5. Ajoutez des champs booléens aux vues de recherche lorsqu'ils sont utilisés pour le filtrage
Si les utilisateurs ont régulièrement besoin de filtrer des enregistrements en fonction d'un champ booléen, ajoutez-le explicitement à la vue de recherche. Dans Studio, activez l'option de recherche dans le panneau des propriétés du champ. Dans le code, ajoutez-le à la vue XML <search>. Cela donne aux utilisateurs un bouton de filtre propre dans la barre de recherche plutôt que de les forcer à utiliser des filtres avancés à chaque fois.
Pièges courants
Utiliser un booléen pour un état qui a plus de deux options
C'est l'erreur la plus courante que les équipes commettent avec les champs booléens. Si un enregistrement peut être dans l'un de trois états ou plus, comme "en attente", "approuvé" et "rejeté", un champ booléen est le mauvais outil. Vous finissez par ajouter un deuxième booléen, puis un troisième, et la logique devient impossible à gérer. Utilisez plutôt un champ de sélection ou un flux de travail de statut approprié. Les champs booléens sont pour des situations véritablement binaires.
Oublier de définir copy=False sur les indicateurs d'approbation
Lorsque les utilisateurs dupliquent des enregistrements dans Odoo, toutes les valeurs de champ sont copiées par défaut. Une commande qui a été marquée comme "approuvée" ou "révisée" aura ces indicateurs définis sur True sur le duplicata immédiatement. Si l'enregistrement dupliqué doit commencer avec une ardoise vierge, ajoutez copy=False à chaque indicateur qui représente une action complétée ou un état atteint.
Ne pas ajouter le champ à la vue de recherche
Un champ booléen sur lequel les utilisateurs doivent filtrer, mais qui n'est pas dans la vue de recherche, les oblige à ouvrir la boîte de dialogue de filtre avancé à chaque fois. Cela ralentit considérablement les flux de travail quotidiens. Si vous ajoutez un champ booléen que les gens utiliseront pour trouver des enregistrements, faites l'effort supplémentaire de l'ajouter à la vue de recherche en même temps.
Utiliser un champ booléen au lieu du champ actif
Odoo a un champ active intégré sur la plupart des modèles qui contrôle si les enregistrements apparaissent dans les vues standard. Si votre champ booléen est destiné à cacher ou archiver des enregistrements, utilisez le champ active natif et son mécanisme de basculement plutôt que de construire une solution de visibilité personnalisée. Cela maintient votre modèle de données aligné avec le comportement standard d'Odoo et fonctionne bien avec les actions d'archivage et de désarchivage déjà intégrées dans l'interface utilisateur.
Champs booléens calculés sans store=True dans les filtres
Si vous créez un champ booléen calculé et essayez de l'utiliser dans des filtres de recherche ou un regroupement de vue liste sans store=True, Odoo générera une erreur ou ignorera silencieusement le filtre. Les champs calculés non stockés n'existent qu'en mémoire et ne peuvent pas être utilisés dans des requêtes SQL. Si un booléen calculé doit être filtrable ou rapportable, ajoutez toujours store=True à la définition du champ.
Conclusion
Le champ booléen est le genre de champ que vous cessez de remarquer précisément parce qu'il fonctionne si bien. Il est partout dans Odoo, du drapeau active qui contrôle la visibilité des enregistrements, au champ is_published qui alimente votre site web, aux dizaines de drapeaux personnalisés que les entreprises ajoutent à leurs propres flux de travail chaque jour.
Comprendre comment il se comporte dans le modèle de données Odoo, comment le configurer correctement avec les bons paramètres par défaut et attributs, et quand l'utiliser par rapport à d'autres types de champs comme Selection vous aidera à construire des implémentations qui sont propres, prévisibles et faciles à maintenir.
Un champ booléen bien fait est invisible pour l'utilisateur final. Il fonctionne simplement. Un champ booléen utilisé incorrectement crée de la confusion, des états corrompus et une pile croissante de solutions de contournement. La différence réside dans la connaissance des règles et leur application cohérente.
Chez Dasolo, nous aidons les entreprises à mettre en œuvre, personnaliser et optimiser Odoo dans tous les départements. Que vous ayez besoin d'aide pour concevoir un modèle de données propre, ajouter des champs personnalisés à vos flux de travail, ou construire un module Odoo complet à partir de zéro, notre équipe est là pour vous soutenir. Contactez-nous et parlons de votre projet Odoo.