Se rendre au contenu

Valeur par défaut dans les champs Odoo : Le guide complet

Comment pré-remplir automatiquement des champs dans Odoo, des valeurs statiques aux valeurs par défaut contextuelles et aux calculs dynamiques.
6 mars 2026 par
Valeur par défaut dans les champs Odoo : Le guide complet
Dasolo
| Aucun commentaire pour l'instant

Introduction


Chaque formulaire dans Odoo a des champs. Certains doivent être remplis manuellement à chaque fois. Mais de nombreux champs peuvent se voir attribuer une valeur par défaut sensée afin que les utilisateurs commencent avec quelque chose d'utile déjà en place. Le mécanisme de valeur par défaut dans Odoo est simple en surface mais comporte plusieurs couches qu'il vaut la peine de comprendre, surtout lorsque vous configurez ou personnalisez des formulaires pour votre équipe.


Que vous soyez un utilisateur commercial ajustant un champ via Odoo Studio ou un développeur suivant un tutoriel sur les champs Odoo, savoir comment fonctionnent les valeurs par défaut fait gagner du temps et évite les erreurs de configuration silencieuses qui sont difficiles à diagnostiquer par la suite.


Ce guide couvre ce que sont les valeurs par défaut dans Odoo, comment elles fonctionnent au niveau de l'ORM, quand utiliser des valeurs par défaut statiques par rapport à des valeurs par défaut dynamiques, et comment les configurer via Odoo Studio ou du code Python.

Quelle est la valeur par défaut dans Odoo


Dans l'ORM Odoo, une valeur par défaut est ce qui est attribué à un champ lorsqu'un nouvel enregistrement est créé, avant que l'utilisateur ne remplisse quoi que ce soit. Ce n'est pas une contrainte. L'utilisateur peut la changer librement. C'est simplement un point de départ qui rend le formulaire plus utile dès le départ.


Le paramètre default est disponible sur pratiquement tous les types de champs dans le framework Odoo : Char, Integer, Float, Boolean, Date, Many2one, Selection, et d'autres. Cela peut être une valeur simple, une lambda Python ou une référence de méthode. Tous ces éléments comptent comme des mécanismes par défaut valides selon le cas d'utilisation.


Dans Odoo Studio, les valeurs par défaut apparaissent dans le panneau des propriétés du champ sous forme d'une simple saisie. Les utilisateurs métiers peuvent définir un défaut statique sans écrire de code. Cela en fait l'une des manières les plus accessibles d'améliorer la cohérence des données en utilisant les champs Odoo Studio, sans nécessiter l'intervention d'un développeur.


Au niveau de la base de données, les valeurs par défaut ne sont pas stockées dans la colonne du champ elle-même. Elles se trouvent soit dans la définition du modèle Python, soit dans les enregistrements ir.default dans la base de données, selon la manière dont elles ont été configurées. Lorsqu'un nouvel enregistrement est créé, Odoo lit ces valeurs par défaut et pré-remplit le formulaire avant que l'utilisateur ne le voie.

Comment fonctionne la valeur par défaut


Lorsqu'un utilisateur ouvre un nouveau formulaire dans Odoo, le framework appelle default_get() sur le modèle. Cette méthode collecte tous les défauts de champ et renvoie un dictionnaire mappant les noms de champ à leurs valeurs par défaut. Le formulaire pré-remplit ensuite ces champs avant que l'utilisateur n'effectue quoi que ce soit.

Il existe quatre principaux types de valeurs par défaut dans Odoo, chacun couvrant un scénario différent.


Valeurs par défaut statiques

Une valeur fixe codée en dur dans la définition du champ ou définie via Studio. Par exemple, définir un champ Boolean sur True par défaut, ou un champ de sélection sur 'draft'. Ce sont les types les plus simples et couvrent la plupart des cas d'utilisation quotidiens dans un modèle de données Odoo.


Valeurs par défaut dynamiques via Lambda ou Méthode

Une fonction ou lambda Python qui s'exécute au moment de la création de l'enregistrement. Cela permet des valeurs par défaut qui dépendent de la date actuelle, de l'utilisateur connecté ou de tout autre contexte disponible. Par exemple, définir l'utilisateur actuel comme la personne responsable par défaut, ou utiliser aujourd'hui comme date de document par défaut.


Voici à quoi ressemblent les valeurs par défaut statiques et dynamiques dans une définition de modèle Python, suivant le modèle de développement standard d'Odoo :


from odoo import fields, models

class CrmLead(models.Model):
    _inherit = 'crm.lead'

    # Valeur par défaut statique
    x_priority_level = fields.Selection(
        [('low', 'Faible'), ('medium', 'Moyenne'), ('high', 'Élevée')],
        string='Niveau de Priorité',
        default='medium',
    )

    # Valeur par défaut dynamique : utilisateur actuel
    x_assigned_by = fields.Many2one(
        'res.users',
        string='Assigné Par',
        default=lambda self: self.env.user,
    )

    # Valeur par défaut dynamique : date d'aujourd'hui
    x_expected_date = fields.Date(
        string='Date de Clôture Prévue',
        default=lambda self: fields.Date.today(),
    )

Valeurs par défaut basées sur le contexte

Valeurs passées par le contexte d'action en utilisant la convention default_field_name. Lorsque vous cliquez sur Créer à partir d'un enregistrement lié, Odoo passe souvent des valeurs de contexte qui deviennent des valeurs par défaut pour les champs relationnels. Par exemple, ouvrir une nouvelle tâche à partir d'un projet définit automatiquement le champ projet. Cela fait partie de la façon dont les flux de navigation fonctionnent dans le cadre Odoo et est entièrement piloté par des clés de contexte que tout développeur ou utilisateur avancé peut configurer.


Valeurs par défaut au niveau utilisateur via ir.default

Odoo prend également en charge les valeurs par défaut spécifiques à l'utilisateur via les enregistrements ir.default. Un administrateur peut configurer une valeur par défaut personnelle pour un champ donné sur un modèle donné. Lorsque cet utilisateur crée un nouvel enregistrement, sa valeur par défaut personnelle prend le pas sur la valeur par défaut au niveau du modèle. Cela est utile dans des environnements multi-utilisateurs où différents membres de l'équipe ont différentes préférences de travail, et c'est l'une des capacités moins connues de l'ORM Odoo.


Ordre de priorité

Lorsque plusieurs sources de valeurs par défaut existent pour le même champ, Odoo les résout dans cet ordre : d'abord ir.default spécifique à l'utilisateur, puis ir.default au niveau de l'entreprise, puis la valeur par défaut définie dans le modèle Python. Les valeurs par défaut basées sur le contexte passées à l'exécution remplacent également les valeurs par défaut au niveau du modèle. Connaître cet ordre vous aide à comprendre pourquoi un champ pourrait ne pas afficher la valeur que vous attendez lorsque vous ouvrez un nouveau formulaire.

Cas d'utilisation commerciale


Les valeurs par défaut apparaissent dans pratiquement tous les modules d'une implémentation Odoo. Voici cinq exemples pratiques issus de véritables flux de travail commerciaux.


CRM : Vendeur par défaut sur les nouveaux leads

Lorsqu'un vendeur crée un nouveau lead ou une nouvelle opportunité, le champ Responsable est par défaut défini sur l'utilisateur actuel. Cela évite que chaque lead commence sans attribution et nécessite une attribution manuelle. La valeur par défaut est définie avec lambda self: self.env.user dans la définition du modèle. En pratique, ce petit détail améliore l'adoption du CRM car les utilisateurs voient immédiatement leurs propres leads sans étape supplémentaire.


Ventes : Conditions de paiement par défaut sur les commandes

Lorsqu'une commande de vente est créée pour un client, des champs comme la liste de prix et les conditions de paiement sont par défaut basés sur la configuration du partenaire client. Un client configuré avec des conditions de paiement Net 30 aura ces conditions pré-remplies sur chaque nouvelle commande. Cela réduit les erreurs de sélection manuelle et garantit que les conditions convenues avec chaque client sont appliquées de manière cohérente, même lorsque différents vendeurs créent les commandes.


Inventaire : Lieux par défaut sur les transferts

Lors de la création d'un transfert interne ou d'un ajustement d'inventaire, les champs de localisation source et destination sont par défaut définis sur les emplacements configurés dans les paramètres de l'entrepôt. Le personnel de l'entrepôt qui travaille toujours dans la même zone trouvera la bonne localisation déjà sélectionnée lorsqu'il ouvrira un nouveau transfert. Cela permet d'économiser des clics et réduit le risque de sélectionner la mauvaise localisation sous pression temporelle.


Comptabilité : Journal par défaut sur les écritures

Lorsqu'un utilisateur crée une nouvelle facture client ou une facture fournisseur, Odoo sélectionne par défaut le journal approprié en fonction du type d'écriture et de la configuration de l'entreprise. Un comptable ouvrant une nouvelle facture fournisseur n'a pas à sélectionner manuellement le journal d'achat à chaque fois. La valeur par défaut est résolue dynamiquement à partir des paramètres de l'entreprise, et non à partir d'une valeur codée en dur, ce qui signifie qu'elle reste correcte même si les journaux sont reconfigurés ultérieurement.


Projet : Étape par défaut sur les nouvelles tâches

Lorsqu'une nouvelle tâche est créée dans un projet, elle commence dans la première étape de la configuration kanban de ce projet. Si la tâche est créée en cliquant sur un bouton d'un enregistrement de projet spécifique, des valeurs par défaut basées sur le contexte pré-remplissent également le projet et parfois le responsable. Les équipes utilisant Odoo pour la gestion de projet bénéficient de ces valeurs par défaut car elles maintiennent les nouvelles tâches au bon endroit dès leur création, sans configuration manuelle.

Créer ou personnaliser des valeurs par défaut


Il existe trois approches principales pour définir des valeurs par défaut dans Odoo, allant d'un clic sans code dans Studio à un contrôle complet en Python dans un module personnalisé.


Utilisation d'Odoo Studio (Sans Code)

Odoo Studio fournit une interface visuelle pour définir des valeurs par défaut sur n'importe quel champ de vos formulaires. Pour définir une valeur par défaut via Studio :

  • Ouvrez l'interface Studio sur le formulaire que vous souhaitez modifier
  • Cliquez sur le champ que vous souhaitez configurer
  • Dans le panneau des propriétés du champ à droite, trouvez l'entrée Valeur par défaut
  • Entrez ou sélectionnez la valeur que vous souhaitez comme valeur par défaut de départ
  • Enregistrez et quittez Studio

Le Studio enregistre cette configuration en tant qu'enregistrement ir.default dans la base de données. Elle s'applique à l'échelle de l'entreprise, sauf si un administrateur spécifie une restriction au niveau de l'utilisateur. Cette approche fonctionne bien pour les valeurs par défaut statiques sur les champs Sélection, Booléen, Char et Entier. Pour les champs Many2one, le Studio vous permet de choisir un enregistrement existant dans un menu déroulant. C'est l'une des utilisations les plus pratiques de la création de champs Odoo sans écrire de code.

Une chose à garder à l'esprit : changer la valeur par défaut via le Studio après que les utilisateurs ont déjà commencé à créer des enregistrements ne met pas à jour ces enregistrements existants. La nouvelle valeur par défaut ne s'applique qu'aux enregistrements créés après le changement.


Utilisation de Python dans la personnalisation technique

Pour la personnalisation technique d'Odoo, les valeurs par défaut sont définies directement dans la définition du champ à l'intérieur du modèle Python. Cela donne un contrôle total sur les valeurs statiques, les lambdas dynamiques et les valeurs par défaut basées sur des méthodes. C'est l'approche préférée dans tout scénario de développement Odoo où la valeur par défaut dépend d'informations d'exécution telles que l'utilisateur actuel, la date du jour ou la configuration de l'entreprise.


Voici un exemple montrant plusieurs types de valeurs par défaut que vous pourriez ajouter à un module personnalisé :


from odoo import fields, models

class SaleOrder(models.Model):
    _inherit = 'sale.order'

    # Valeur par défaut Booléenne statique
    x_requires_review = fields.Boolean(
        string='Nécessite une révision',
        default=False,
    )

    # Valeur par défaut de Sélection statique
    x_delivery_preference = fields.Selection(
        [('standard', 'Standard'), ('express', 'Express')],
        string='Préférence de Livraison',
        default='standard',
    )

    # Valeur par défaut dynamique utilisant une méthode
    def _default_note(self):
        return self.env['ir.config_parameter'].sudo().get_param(
            'sale.default_note', default=''
        )

    x_internal_note = fields.Text(
        string='Note Interne',
        default=_default_note,
    )

Ce modèle suit la convention standard des champs Python d'Odoo et fonctionne pour tous les types de champs Odoo. La valeur par défaut basée sur une méthode est particulièrement utile lorsque la logique est plus complexe qu'une simple expression lambda.


Utilisation des enregistrements ir.default par programmation

Vous pouvez également créer ou mettre à jour des enregistrements ir.default via l'API XML-RPC d'Odoo ou dans un fichier de données de module. Cela est utile lors de l'expédition d'une configuration par défaut dans le cadre de l'installation d'un module personnalisé. Le modèle ir.default accepte un nom de modèle, un nom de champ, une valeur et, en option, une entreprise ou un utilisateur pour limiter la portée de la valeur par défaut.


Cette approche est moins courante dans le développement quotidien mais se présente lors de la création de modules Odoo installables qui doivent configurer des valeurs par défaut sensées dans le cadre de leur routine de configuration.

Meilleures pratiques pour les valeurs par défaut dans Odoo


Définir des valeurs par défaut sur les champs obligatoires

Si un champ est obligatoire, donnez-lui une valeur par défaut sensée chaque fois que cela est possible. Cela réduit les frictions et empêche les erreurs de sauvegarde lorsque les utilisateurs essaient de soumettre un nouvel enregistrement sans réaliser qu'un champ est requis. Combiner required=True avec une valeur par défaut pratique est un bon modèle dans le modèle de données Odoo.


Utilisez des Lambdas pour les Valeurs par Défaut de Date

Ne jamais coder en dur une date comme valeur par défaut. Utilisez lambda self: fields.Date.today() afin que la valeur par défaut soit toujours la date actuelle au moment où l'enregistrement est créé. Une date codée en dur serait incorrecte pour tout enregistrement créé après que le code ait été écrit, ce qui, en pratique, signifie qu'elle est incorrecte presque immédiatement.


Gardez la Logique par Défaut Légère

Les fonctions par défaut s'exécutent lors de la création d'un enregistrement, ce qui signifie qu'elles s'exécutent chaque fois qu'un utilisateur ouvre un nouveau formulaire. Évitez de faire des requêtes à la base de données, d'appeler des API externes ou d'exécuter des calculs lourds à l'intérieur des méthodes par défaut. Gardez-les rapides et simples. Si vous avez besoin de quelque chose de plus complexe, envisagez d'utiliser un onchange ou un champ calculé déclenché par un autre champ à la place.


Utilisez des Valeurs par Défaut de Contexte pour les Flux de Navigation

Lors de la création d'actions personnalisées ou de boutons intelligents qui ouvrent un nouveau formulaire, passez les valeurs default_field_name par le biais du contexte d'action plutôt que de vous fier aux valeurs par défaut statiques du modèle. C'est exactement ainsi que fonctionnent les boutons natifs d'Odoo et cela maintient votre personnalisation Odoo alignée avec les conventions du framework.


Testez les Valeurs par Défaut avec Plusieurs Profils Utilisateurs

Les valeurs par défaut dynamiques qui font référence à self.env.user ou self.env.company se comportent différemment selon qui est connecté. Testez toujours avec au moins deux comptes utilisateurs différents, et avec différentes configurations d'entreprise si vous utilisez une configuration multi-entreprises. Ce qui fonctionne pour un administrateur peut produire des résultats inattendus pour un utilisateur standard.

Pièges courants


Utiliser un Objet Mutable comme Valeur par Défaut

C'est l'erreur classique en Python et cela s'applique également au développement Odoo. Ne jamais écrire default=[] ou default={} pour un champ. Python partage le même objet liste ou dictionnaire entre toutes les instances, ce qui entraîne un mélange de données entre les enregistrements de manière inattendue. Utilisez plutôt une lambda : default=lambda self: []. Cela crée un nouvel objet chaque fois qu'un enregistrement est initialisé.


Les Valeurs par Défaut Ne Déclenchent Pas onchange

Définir une valeur par défaut ne déclenche pas les méthodes onchange. Si votre formulaire a un onchange sur un champ qui déclenche normalement des mises à jour sur d'autres champs, la valeur par défaut contourne entièrement cette réaction en chaîne. Les utilisateurs verront la valeur pré-remplie mais aucun des effets en aval que l'onchange produirait normalement. Si vous avez besoin que l'onchange s'exécute lors de l'initialisation, vous devez l'appeler explicitement dans un remplacement personnalisé de default_get ou gérer la logique d'une autre manière.


Conflits de valeurs par défaut entre ir.default et la définition du modèle

Si vous définissez une valeur par défaut à la fois en Python et via Studio ou un enregistrement ir.default, Odoo les résout selon un ordre de priorité. L'enregistrement ir.default a la priorité sur la valeur par défaut Python au niveau du modèle. C'est une source courante de confusion lors du débogage de valeurs de champ inattendues, surtout après un changement de configuration dans Studio qui remplace discrètement quelque chose qu'un développeur a défini dans le code.


Supposer qu'une valeur par défaut signifie une valeur requise

Un champ avec une valeur par défaut n'est pas automatiquement requis. Si l'utilisateur vide le champ, il sera enregistré vide. Ne comptez pas uniquement sur la valeur par défaut pour garantir la complétude des données. Si vous avez toujours besoin d'une valeur dans ce champ, combinez la valeur par défaut avec required=True.


Codage en dur des ID d'enregistrement d'entreprise ou d'utilisateur

Une valeur par défaut comme default=1 faisant référence à un utilisateur ou une entreprise par son ID de base de données est fragile. Elle échouera dans tout environnement où cet enregistrement a un ID différent, ce qui est pratiquement le cas de chaque base de données de production qui n'a pas été configurée de manière identique à l'environnement de développement. Utilisez toujours des références dynamiques : lambda self: self.env.company.id ou lambda self: self.env.ref('module.xml_id').id.

Conclusion


Les valeurs par défaut sont une petite mais puissante fonctionnalité dans le modèle de données Odoo. Elles réduisent la saisie manuelle des données, guident les utilisateurs vers des choix cohérents et rendent les formulaires plus faciles à utiliser pour tous les membres de l'équipe. Que vous les configuriez via Odoo Studio pour un changement rapide sans code ou que vous les définissiez en Python dans le cadre d'une personnalisation technique, comprendre comment fonctionnent les valeurs par défaut vous aide à construire de meilleures implémentations Odoo.


Les points clés à garder à l'esprit : les valeurs par défaut ne s'exécutent qu'au moment de la création de l'enregistrement, pas en continu. Elles ne déclenchent pas les méthodes onchange. Plusieurs sources de valeurs par défaut suivent un ordre de priorité défini. Et les objets mutables comme les listes ou les dictionnaires doivent toujours être enveloppés dans un lambda lorsqu'ils sont utilisés comme valeurs par défaut de champ.


Bien gérer les valeurs par défaut est souvent la différence entre un formulaire qui semble intuitif et un qui crée des frictions pour les utilisateurs chaque fois qu'ils doivent créer un nouvel enregistrement. C'est un petit investissement qui porte ses fruits chaque jour.


Chez Dasolo, nous aidons les entreprises à mettre en œuvre, personnaliser et optimiser Odoo pour s'adapter à leurs flux de travail spécifiques. Si vous avez besoin d'aide pour configurer des valeurs par défaut de champ, créer des champs personnalisés ou concevoir un modèle de données Odoo qui fonctionne réellement pour votre équipe, nous serions ravis de vous aider. Contactez-nous et parlons de votre mise en œuvre Odoo.

Valeur par défaut dans les champs Odoo : Le guide complet
Dasolo 6 mars 2026
Partager cet article
Se connecter pour laisser un commentaire.