Se rendre au contenu

Champ Texte dans Odoo : Guide Complet pour Bien Utiliser le Field

Guide complet sur le champ Texte dans le modèle de données Odoo : usages courants, bonnes pratiques et options avancées pour personnaliser son comportement
6 mars 2026 par
Champ Texte dans Odoo : Guide Complet pour Bien Utiliser le Field
Dasolo
| Aucun commentaire pour l'instant

Introduction


Le champ Texte est un des types les plus utiles d’Odoo. Chaque fois qu’un collaborateur saisit des notes, rédige la description d’un produit ou laisse un commentaire interne sur une commande, il y a de fortes chances qu’il utilise un champ Texte.


À l’écran, cela ressemble à une simple zone de saisie multi‑lignes, mais connaître ses caractéristiques et son rôle dans le modèle de données et l’ORM d’Odoo change tout quand vous concevez des formulaires, développez un module personnalisé ou créez des champs via Odoo Studio.

Ce guide présente l’essentiel : ce que stocke un champ Texte, son comportement, des exemples concrets en entreprise, comment le personnaliser techniquement, les pratiques recommandées et les erreurs fréquentes à éviter.

Qu’est-ce que le champ Texte dans Odoo


Dans l’ORM d’Odoo, fields.Text sert à conserver du texte sur plusieurs lignes. En base PostgreSQL il devient une colonne TEXT, sans limite de longueur prédéfinie. Que l’utilisateur saisisse une courte phrase ou plusieurs paragraphes, le champ gère les deux cas sans distinction.


Dans un formulaire, il s’affiche comme un <textarea> redimensionnable. Dans une vue liste, le contenu est tronqué pour tenir la colonne. Dans les vues de recherche, il accepte des filtres textuels au même titre qu’un champ Char.


Voici la forme minimale d’une déclaration de champ Texte dans un module Python :

from odoo import fields, models

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

    internal_notes = fields.Text(
        string='Internal Notes',
        translate=False,
    )

Dans Odoo Studio, ce composant porte le nom Multi-Line Text. Studio lui attribue automatiquement un préfixe x_studio_. Si vous le créez via du code ou l’API XML‑RPC, vous choisirez vous‑même le nom technique du champ.


Différences avec Char et Html

Odoo propose trois types pour stocker du texte ; bien choisir entre eux évite bien des confusions et des retours en arrière.


  • Champ Char : champ mono‑ligne, idéal pour les noms, codes, références courtes. Possède une taille optionnelle.
  • Champ Text : zone multi‑ligne en texte brut, adaptée aux notes, descriptions et commentaires libres. Ne gère pas le formatage.
  • Champ Html : éditeur riche multi‑ligne, conçu pour du contenu formaté — modèles d’email, descriptions web, pages — et contenant du HTML.

Le champ Texte se situe entre Char et Html : il offre plus d’espace qu’un Char sans introduire la complexité et les balises d’un Html. Pour la plupart des notes internes et descriptions simples, c’est le choix pertinent.

Comment fonctionne ce champ


Quand vous ajoutez un champ Texte à un modèle Odoo, l’ORM crée automatiquement la colonne TEXT dans PostgreSQL au moment de l’installation ou de la mise à jour du module. Aucune migration SQL manuelle n’est nécessaire.


Contrairement au Char, le champ Text n’a pas de paramètre size. La colonne en base n’impose pas de limite de caractères par conception : ces champs sont pensés pour du contenu ouvert où limiter la longueur à l’avance n’aurait pas de sens.


Principales propriétés du champ

Voici les attributs les plus utiles pour un champ Texte dans Odoo.


  • translate : si True, la valeur peut être traduite par langue. Indispensable quand le contenu est visible côté client et doit exister en plusieurs langues.
  • required : force la saisie au niveau interface et ORM. Impossible d’enregistrer l’enregistrement si le champ est vide.
  • default : valeur par défaut appliquée lors de la création d’un enregistrement. Peut être une chaîne statique ou une méthode callable.
  • compute : associe une méthode Python pour calculer dynamiquement la valeur, utile pour des résumés ou contenus dérivés.
  • store : utilisé avec compute, indique si la valeur calculée est persistée. Avec store=True, le texte devient interrogeable et exploitable dans les rapports.
  • copy : définit si la valeur est dupliquée lors d’un doublon d’enregistrement. Par défaut True. Mettre à False pour des notes contextuelles qui ne doivent pas être recopiées.
  • index : rarement utilisé sur les Text, car l’indexation plein texte en PostgreSQL diffère des index B‑tree du Char. Pour rendre le contenu réellement interrogeable, on préfère la recherche plein texte ou les outils de filtrage d’Odoo.

Affichage dans les vues

En formulaire, le Text se présente comme un <textarea> redimensionnable verticalement. En liste, le texte est coupé pour s’adapter. En recherche, il fonctionne avec les filtres textuels dès qu’il est déclaré dans la vue de recherche.


Contrairement au champ Html, il n’ouvre pas d’éditeur WYSIWYG : les utilisateurs voient une zone de texte brute sans barre d’outils. Ce qui est tapé est stocké tel quel, sauts de ligne inclus.


Interaction avec l’ORM

Pour un développeur, lire et écrire un champ Texte est simple : on accède directement à l’attribut sur l’objet record et l’ORM s’occupe de la persistance. Les retours à la ligne sont conservés. Aucun assainissement automatique n’est appliqué — contrairement au champ Html où Odoo nettoie pour prévenir les risques XSS.

Cas d’usage en entreprise


Exemples concrets d’utilisation


Ventes : notes internes de commande

Les champs note ou internal_note sur les commandes sont souvent des Text. Les commerciaux y consignent consignes de livraison, exigences d’emballage ou préférences clients qui ne doivent pas apparaître sur les documents clients mais doivent suivre le traitement opérationnel.


Stock : notes internes produit

Sur la fiche produit, l’onglet « Notes » propose un champ Texte pour les remarques internes. Les équipes logistiques y indiquent mode de manutention, fragilité ou informations fournisseurs — des données opérationnelles qui ne doivent pas être publiées sur le site ni sur les documents extérieurs.


Achats : conditions et consignes fournisseur

Sur les bons de commande, un champ Texte pour les remarques fournisseur permet aux acheteurs de conserver les accords spécifiques ou contraintes de livraison discutés par téléphone ou mail. Avoir cette info attachée à la commande évite les malentendus à la réception des marchandises.


CRM : comptes‑rendus et notes de réunion

Dans le pipeline CRM, les commerciaux utilisent un champ Texte sur les opportunités pour résumer les réunions, noter objections ou contexte d’achat. Comparé au chatter, un champ dédié garde ces informations structurées et faciles à consulter lorsqu’un collègue prend le relais.


RH : commentaires employés et candidats

Les équipes RH consignent souvent notes d’entretien, observations d’onboarding ou remarques de performance dans un champ Texte lié au dossier employé ou candidat. C’est une solution simple, imprimable et recherchable sans créer un modèle à part entière.

Créer ou personnaliser un champ Texte


Trois méthodes pour ajouter un champ Texte selon votre contexte technique.


Via Odoo Studio (sans code)

Odoo Studio est la méthode la plus accessible pour les consultants et utilisateurs métier qui ne veulent pas coder. Pour ajouter un champ Texte :

  1. Ouvrez Odoo Studio depuis le menu principal (application Studio requise).
  2. Allez sur le formulaire ciblé.
  3. Glissez un champ Multi‑Line Text depuis la barre latérale Studio vers le formulaire.
  4. Définissez l’étiquette, le caractère obligatoire et la valeur par défaut dans le panneau de propriétés.
  5. Enregistrez puis fermez Studio.

Studio crée le champ et met à jour la vue automatiquement. Le nom technique commence par x_studio_ et le champ est disponible tout de suite, sans migration ni redémarrage du serveur.


Via Python dans un module personnalisé

Pour des personnalisations versionnées et déployables, définir le champ en Python est la bonne pratique. Exemple standard en développement Odoo :


from odoo import fields, models

class ResPartner(models.Model):
    _inherit = 'res.partner'

    x_client_notes = fields.Text(
        string='Client Notes',
        translate=False,
        copy=False,
    )

Après la définition côté modèle, ajoutez le champ dans la vue XML afin qu’il apparaisse dans l’interface. Odoo crée la colonne en base à l’installation ou la mise à jour du module. Cette approche est recommandée en production pour garantir traçabilité et maintenabilité.


Via l’API XML‑RPC

Si vous gérez Odoo par scripts ou déploiements automatisés, vous pouvez créer des champs Texte via l’API XML‑RPC.


field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_client_notes',
        'field_description': 'Client Notes',
        'model_id': model_id,
        'ttype': 'text',
        'state': 'manual',
        'translate': False,
        'copy': False,
    }]
)

Le paramètre ttype: text indique la création d’un champ Texte (par opposition à char ou html). state: manual signale que le champ a été créé en dehors d’un module — comportement normal pour les champs Studio ou créés par API. C’est la méthode que nous utilisons chez Dasolo pour déployer des configurations à distance.

Bonnes pratiques


1. N’utilisez Text que si le contenu nécessite plusieurs lignes

Erreur fréquente : choisir Text alors qu’un Char suffit. Pour des noms, codes ou références courtes, préférez Char. Réservez Text aux saisies attendues en phrases ou paragraphes. Employer Text pour de petites valeurs alourdit l’interface et rend le modèle trompeur.


2. Préférez Html si le formatage est requis

Si le contenu doit contenir listes à puces, gras, liens ou autres mises en forme, Text n’est pas adapté. Utilisez Html. Demander aux utilisateurs d’improviser du formatage dans une zone de texte brute crée de la frustration et des résultats plats sans mise en forme.


3. Activez translate pour le contenu client multilingue

Sur des instances Odoo utilisées dans plusieurs langues, tout champ Texte visible côté client ou dans des documents doit avoir translate=True. Cela permet d’avoir des versions spécifiques par langue sans écraser le travail des traducteurs. Pour des notes internes, la traduction n’est généralement pas nécessaire.


4. Mettez copy=False pour les notes qui ne doivent pas être dupliquées

Par défaut, les Text sont recopiés lors d’un duplicata. Pour des notes contextuelles — conversation client, incident unique — cela sème la confusion. Mettre copy=False fait démarrer les enregistrements dupliqués avec une zone de notes vide.


5. Utilisez compute avec store=True pour des résumés auto‑générés

On peut calculer dynamiquement un champ Texte qui agrège des champs du même enregistrement. Avec store=True et les bons déclencheurs @api.depends(), la valeur est persistée et devient interrogeable — pratique pour créer des résumés internes sans bâtir un rapport à part.

Pièges courants


Choisir Text alors qu’il faut Html

Si le champ alimente un site web ou un PDF formaté, Text supprimera toute mise en page. Les utilisateurs qui collent du contenu formaté verront un texte plat. Interrogez toujours le canal de sortie avant de décider du type de champ.


Choisir Text alors qu’il faut Char

Le Text s’affiche comme une grande zone redimensionnable. Pour des valeurs brèves (numéro de suivi, code de variante), cela encombre le formulaire. Les contenus monolignes appartiennent au champ Char, plus compact et mieux intégré au layout.


Oublier translate sur des libellés multilingues

Sur des déploiements internationaux, oublier translate=True sur un champ Texte visible mène à afficher la même valeur pour tous les utilisateurs, quelle que soit leur langue. Pour les descriptions produits notamment, c’est problématique. La correction est simple, mais l’ajout après coup nécessite une migration soigneuse pour ne pas écraser les valeurs existantes.


Stocker des données structurées dans un Text

Enregistrer du JSON, des valeurs séparées par des pipes ou d’autres formats structurés dans un champ Texte complique la maintenance. Si les données sont structurées, utilisez les types Odoo adaptés : Selection pour options fixes, Many2one pour relations, ou modèle lié pour plusieurs champs. Encoder la structure dans du texte libre empêche la recherche, le tri et le reporting fiables.


Ne pas ajouter le champ à la vue de recherche

Un champ Texte porteur d’informations importantes mais absent de la vue de recherche ne peut pas être filtré depuis la barre de recherche. Les utilisateurs se retrouvent à parcourir manuellement les enregistrements. Si le contenu doit être recherché, pensez à l’ajouter à la définition de la vue de recherche dès la création.

Conclusion


Le champ Texte est un élément discret d’Odoo qui devient essentiel dès qu’on conçoit des formulaires avec sérieux.


 Bien choisir entre Char, Text et Html est une des premières décisions d’un projet Odoo ; la bonne option évite des retours coûteux et des problèmes de qualité de données plus tard.

Que vous ajoutiez un champ via Odoo Studio, le définissiez dans un module Python ou le créiez par API, les pratiques exposées ici vous aideront à prendre la bonne décision et à configurer correctement le champ selon l’usage attendu.


Un modèle de données Odoo propre se construit sur une série de choix simples et cohérents. Choisir le bon type de champ pour chaque information en fait partie — bien utilisé, le champ Texte est un outil flexible et fiable pour capturer ce qui ne se prête pas aux champs structurés.

Chez Dasolo, nous accompagnons les entreprises dans l’implémentation, la personnalisation et l’optimisation d’Odoo pour tous les services. Besoin d’aide pour concevoir un modèle de données clair, créer des champs sur mesure ou déployer une solution complète ? Notre équipe peut vous épauler. Contactez‑nous et parlons de votre projet Odoo.

Champ Texte dans Odoo : Guide Complet pour Bien Utiliser le Field
Dasolo 6 mars 2026
Partager cet article
Se connecter pour laisser un commentaire.