Se rendre au contenu

Champ Char dans Odoo : Le Guide Complet

Tout ce que vous devez savoir sur le champ Char dans le modèle de données Odoo, de l'utilisation de base à la personnalisation technique.
6 mars 2026 par
Champ Char dans Odoo : Le Guide Complet
Dasolo
| Aucun commentaire pour l'instant

Introduction


Le champ Char est l'un des types de champ les plus fondamentaux dans le modèle de données Odoo. Si vous avez déjà regardé un nom de contact, une référence de produit ou une note de commande, vous avez interagi avec un champ Char sans nécessairement le savoir.


Comprendre comment ce type de champ fonctionne est important que vous soyez un utilisateur professionnel configurant des formulaires dans Odoo Studio, un développeur écrivant des modules personnalisés, ou un consultant aidant un client à concevoir son environnement Odoo.


Cela semble simple en surface, mais il y a plusieurs propriétés et comportements qu'il vaut la peine de connaître pour bien l'utiliser et éviter les erreurs courantes. Ce guide passe en revue tout, de ce que le champ stocke et comment il se comporte dans l'interface, à sa création et personnalisation, ainsi que des cas d'utilisation réels.

Qu'est-ce que le champ Char dans Odoo


Dans l'ORM Odoo, le champ Char est conçu pour stocker de courtes chaînes de texte. Il correspond à une colonne VARCHAR ou TEXT dans PostgreSQL, selon que vous définissez ou non une limite de taille.


Du point de vue de l'utilisateur, un champ Char apparaît comme un champ de saisie de texte sur une seule ligne dans les formulaires et comme une colonne de texte brut dans les vues en liste. C'est le choix standard pour stocker des noms, des codes, des références, des identifiants et tout autre court morceau de texte qui tient sur une ligne.


Voici à quoi cela ressemble dans une définition de modèle Python :

from odoo import fields, models

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

    customer_po_reference = fields.Char(
        string='Référence de commande client',
        size=64,
        index=True,
    )

Le paramètre string définit l'étiquette affichée dans l'interface. Le paramètre size, qui est optionnel, limite le nombre de caractères. Le paramètre index crée un index de base de données pour des recherches plus rapides.


Dans Odoo Studio, ce même champ est appelé un champ Texte (ligne unique). Lorsqu'il est créé via Studio, il obtient automatiquement un préfixe x_studio_. Lorsqu'il est créé par code ou via l'API XML-RPC, vous choisissez vous-même le nom technique.

Comment fonctionne le champ


Lorsque vous définissez un champ Char dans Odoo, le framework gère automatiquement la création de la colonne dans la base de données lors de l'installation ou de la mise à niveau du module. Il n'est pas nécessaire d'écrire des migrations SQL manuellement.


Dans la base de données, les champs Char sans limite de taille sont stockés sous forme de TEXT. Ceux avec un paramètre size utilisent VARCHAR(n). PostgreSQL traite les deux types de manière efficace, donc la différence concerne principalement l'application d'une contrainte de longueur plutôt qu'une distinction majeure en termes de performance.


Attributs clés du champ

Voici les propriétés les plus importantes d'un champ Char dans le framework Odoo :

  • size : Nombre maximum de caractères. Omettez ceci et il n'y a pas de limite de longueur au niveau de la base de données.
  • translate : Lorsqu'il est défini sur True, la valeur du champ peut être traduite par langue. Utile dans les déploiements multilingues.
  • requis: Rend le champ obligatoire dans l'interface et au niveau du modèle.
  • par défaut: Définit une valeur par défaut automatique lors de la création de nouveaux enregistrements.
  • index: Crée un index de base de données pour un filtrage et une recherche plus rapides sur ce champ.
  • calculer: Lie une méthode Python qui calcule la valeur du champ de manière dynamique, utile pour les valeurs dérivées ou concaténées.
  • stockage: Lorsqu'il est combiné avec calculer, contrôle si la valeur calculée est persistée dans la base de données.
  • copier: Contrôle si la valeur du champ est copiée lors de la duplication d'un enregistrement. Par défaut, c'est Vrai.

Comment cela apparaît dans les vues

Dans les vues de formulaire, un champ Char se rend sous la forme d'un élément standard <input type="text">. Dans les vues de liste, il s'affiche sous forme de texte brut. Dans les vues de recherche, il prend en charge les filtres utilisant les opérateurs contient, égal et commence par par défaut.


Vous pouvez également combiner un champ Char avec des widgets dans la vue pour changer son apparence. Par exemple, le widget email transforme un champ Char en un lien email cliquable, et le widget url le fait s'ouvrir dans un nouvel onglet de navigateur.


Interaction avec l'ORM Odoo

D'un point de vue développeur, la lecture et l'écriture des champs Char fonctionnent comme n'importe quel autre champ dans l'ORM Odoo. Vous accédez à la valeur directement sur l'objet d'enregistrement, et le framework gère la désinfection et la validation en fonction de la définition du champ. Il n'y a pas de transformations complexes impliquées, ce qui fait partie de ce qui rend le champ Char si pratique pour un usage quotidien dans le développement Odoo.

Cas d'utilisation en entreprise


Le champ Char apparaît dans presque tous les coins d'une implémentation Odoo. Voici cinq exemples du monde réel issus de flux de travail commerciaux courants.


CRM : Numéros de référence client

De nombreuses entreprises attribuent des numéros de référence internes à leurs clients. Un champ Char sur le modèle res.partner peut stocker ce code, le rendant consultable à partir de la liste des clients et visible sur les commandes de vente et les factures. Les équipes de vente peuvent rapidement retrouver le bon compte sans confusion lorsque plusieurs clients partagent des noms similaires.


Ventes : Références de commande d'achat

Lorsque les clients envoient des commandes d'achat, ils incluent un numéro de commande (PO) qui doit apparaître sur les factures et les documents de livraison. Le champ natif client_order_ref sur sale.order est un champ Char. Il se transfère automatiquement à la facture, réduisant les échanges avec le client concernant les références manquantes.


Inventaire : Références internes de produit

Le champ default_code sur product.template est un champ Char natif dans Odoo. Il stocke la référence interne utilisée à travers les entrepôts, les scanners de codes-barres et les commandes d'achat. Maintenir ce champ propre et cohérent est l'une des priorités les plus courantes en matière de qualité des données dans les mises en œuvre d'inventaire.


Comptabilité : Numéros de taxe et d'enregistrement

Les numéros de TVA, les identifiants fiscaux et les numéros d'enregistrement d'entreprise sont stockés en tant que champs Char dans les dossiers des partenaires. Ces valeurs apparaissent automatiquement sur les factures clients et les factures fournisseurs lorsqu'elles sont correctement configurées. Pour les entreprises opérant dans plusieurs pays, avoir ces données stockées de manière fiable en un seul endroit permet d'économiser beaucoup de travail de correction manuelle.


RH : Identifiants d'employé et codes de badge

Les équipes RH ont souvent besoin de stocker des numéros d'identification d'employé, des codes de badge ou des identifiants provenant de systèmes de paie externes ou de contrôle d'accès. Un champ Char sur le modèle d'employé facilite le lien entre les enregistrements Odoo et d'autres outils commerciaux sans nécessiter une intégration complète dès le premier jour.

Créer ou personnaliser le champ Char


Il existe trois principales façons d'ajouter un champ Char à un modèle Odoo, en fonction de votre configuration technique et de votre approche de déploiement.


Utilisation d'Odoo Studio (sans code)

Odoo Studio est l'outil de personnalisation low-code intégré. Pour ajouter un champ Char sans écrire de code :

  1. Ouvrez Odoo Studio depuis le menu principal.
  2. Naviguez vers le formulaire où vous souhaitez ajouter le champ.
  3. Faites glisser un champ Texte (ligne unique) depuis la barre latérale vers le formulaire.
  4. Définissez l'étiquette, le statut requis et éventuellement une limite de taille dans le panneau des propriétés du champ.
  5. Enregistrez et fermez Studio.

Studio crée automatiquement le champ avec un préfixe x_studio_ et l'ajoute à la vue du formulaire. Aucune migration de base de données n'est nécessaire de votre part.


Utiliser Python dans un module personnalisé

Pour les développeurs construisant des modules Odoo, les champs Char sont définis dans des fichiers de modèle Python. C'est l'approche recommandée pour toute personnalisation qui doit être versionnée et déployée sur plusieurs environnements :

from odoo import fields, models

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

    x_erp_customer_id = fields.Char(
        string='ID Client ERP',
        size=32,
        index=True,
        copy=False,
    )

Après avoir ajouté le champ au modèle, vous devez également l'ajouter au fichier XML de vue pertinent afin qu'il apparaisse dans l'interface. Odoo gère la création de la colonne de base de données lorsque vous installez ou mettez à jour le module.


Utiliser l'API XML-RPC

Si vous gérez des personnalisations Odoo de manière programmatique, par exemple dans le cadre d'un pipeline de déploiement ou d'un carnet de configuration à distance, vous pouvez créer des champs Char via l'API XML-RPC :

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_custom_reference',
        'field_description': 'Référence Personnalisée',
        'model_id': model_id,
        'ttype': 'char',
        'size': 64,
        'state': 'manual',
    }]
)

La valeur state: manual indique à Odoo que ce champ a été créé manuellement (et non par un module), ce qui est le paramètre correct pour les champs créés via Studio ou l'API. C'est ainsi que Dasolo gère la création de champs à distance pour ses clients dans le cadre de scripts de configuration automatisés.

Meilleures pratiques


1. Définissez une taille lorsque vous connaissez la longueur maximale

Si le champ stocke des codes de pays ISO, des numéros de téléphone ou des identifiants de longueur fixe, définissez une size. Cela communique l'intention à quiconque lisant le modèle et prévient les erreurs de saisie de données accidentelles. Un champ destiné à stocker un code de pays à deux lettres ne devrait pas accepter silencieusement une chaîne de 500 caractères.


2. Ajoutez un index pour les champs que vous recherchez fréquemment

Si les utilisateurs filtrent ou recherchent régulièrement des enregistrements par un champ Char, tel qu'un code client ou une référence de commande, définissez index=True. Sur des tables contenant des dizaines de milliers d'enregistrements, cela peut faire la différence entre une recherche d'une seconde et une attente de dix secondes.


3. Utilisez translate=True pour le contenu multilingue

Si votre instance Odoo sert des utilisateurs dans plusieurs langues et qu'un champ contient du texte qui varie selon la langue, activez la traduction. Cela est important pour les noms de produits, les postes de travail ou tout champ dont la valeur devrait être vue par des utilisateurs dans différentes régions dans leur propre langue.


4. Donnez aux champs des noms techniques clairs et cohérents

Dans les modules personnalisés, nommez les champs de manière descriptive. Un champ appelé x_customer_erp_id est beaucoup plus facile à maintenir que x_field1. Si vous utilisez Studio, renommez le champ dans le panneau des propriétés avant de le déployer. Les noms techniques ne peuvent pas être facilement changés plus tard une fois les données stockées.


5. Utilisez compute pour les références dérivées

Les champs Char peuvent être calculés dynamiquement. Par exemple, une référence qui combine une année et un numéro de séquence peut être construite comme un champ Char calculé. Avec store=True, la valeur est enregistrée dans la base de données et peut être utilisée dans des filtres de recherche et des rapports, tandis que la logique de calcul reste centralisée dans une méthode.

Pièges courants


Aucune limite de taille laisse la porte ouverte aux mauvaises données

Sans contrainte de taille, les utilisateurs peuvent coller des paragraphes entiers dans un champ de référence. C'est un vrai problème lorsque la valeur apparaît plus tard sur des documents imprimés ou est envoyée à des systèmes externes avec des limites de caractères strictes. Définissez toujours une taille raisonnable pour les champs où la longueur compte.


Index manquants sur les champs fréquemment recherchés

Sans index, le filtrage par un champ Char sur une grande table nécessite un scan complet de la table. De nombreuses équipes découvrent ce problème uniquement après que leur base de données a atteint une taille significative. Si un champ est utilisé régulièrement dans des filtres de vue liste ou des barres de recherche, ajoutez l'index dès le départ.


Confondre Char avec le champ Texte

Le champ Char est destiné à un texte court sur une seule ligne. Le champ Texte est destiné à un contenu plus long sur plusieurs lignes. Utiliser un champ Char pour des adresses, des notes ou des descriptions conduit à une mauvaise expérience utilisateur, car l'entrée ne se pliera pas et ne permettra pas de sauts de ligne. Si le contenu peut raisonnablement s'étendre sur plusieurs phrases, utilisez plutôt un champ Texte.


Oublier de traduire les champs multilingues

Dans les entreprises opérant dans plusieurs pays, manquer l'option translate=True sur un champ destiné aux utilisateurs signifie que tous les utilisateurs de langue voient la même valeur. Cela peut causer de la confusion sur les documents destinés aux clients où le contenu du champ devrait s'adapter à la langue du document.


Utiliser Char pour des données qui devraient être une Sélection ou une relation

Si un champ contient toujours l'une d'un ensemble limité de valeurs, comme une catégorie, un statut ou un pays, il devrait être un champ de Sélection ou une relation Many2one, et non un champ Char. Utiliser Char pour cela crée des valeurs incohérentes à travers les enregistrements et rend le filtrage et le reporting peu fiables. Les champs de texte libre invitent aux fautes de frappe et aux variations qui perturbent le regroupement et l'analyse.

FAQ


Quelle est la différence entre un champ Char et un champ Texte dans Odoo?

Un champ Char stocke un court texte sur une seule ligne et s'affiche comme un champ de texte dans les formulaires. Un champ Text stocke un contenu plus long sur plusieurs lignes et s'affiche comme une zone de texte redimensionnable. Utilisez Char pour les noms, les codes et les références. Utilisez Text pour les descriptions, les notes et tout ce que les utilisateurs pourraient écrire en plusieurs phrases.


Puis-je limiter le nombre de caractères stockés dans un champ Char ?

Oui. Utilisez le paramètre size lors de la définition du champ en Python, par exemple fields.Char(size=64). Dans Odoo Studio, vous pouvez définir cette limite dans le panneau des propriétés du champ. Si aucune taille n'est définie, le champ n'a pas de limite de longueur imposée au niveau de la base de données.


Comment faire apparaître un champ Char dans la barre de recherche ?

Ajoutez le champ à la vue de recherche du modèle. Dans Studio, activez l'option de recherche dans les propriétés du champ. Dans le code, ajoutez <field name="your_char_field"/> à l'intérieur de la définition de la vue <search> dans votre XML. Une fois ajouté, les utilisateurs peuvent filtrer les enregistrements par ce champ directement depuis la barre de recherche.


Puis-je stocker des nombres dans un champ Char ?

Techniquement oui, mais ce n'est pas recommandé pour les valeurs qui nécessitent un calcul ou une comparaison numérique. Utilisez des champs Integer ou Float pour les quantités et les montants. Char est approprié pour les chaînes qui contiennent des chiffres, comme les codes postaux, les numéros de téléphone, les numéros IBAN ou les numéros de série, où la valeur est traitée comme du texte plutôt que comme un nombre.


Comment créer un champ Char calculé qui stocke également sa valeur ?

Définissez le champ avec compute='_compute_my_field' et store=True. Écrivez la méthode de calcul en utilisant @api.depends() pour déclarer quels autres champs déclenchent la recomputation. Avec store=True, Odoo enregistre la valeur calculée dans la base de données, la rendant disponible dans les recherches, les filtres et les exports sans recalculer à chaque lecture.

Conclusion


Le champ Char est trompeusement simple. La plupart des gens interagissent avec des dizaines d'entre eux chaque jour dans Odoo sans y penser. Mais lorsque vous construisez ou personnalisez un système Odoo, comprendre ses propriétés, son comportement en base de données et quand l'utiliser par rapport à d'autres types de champs fait une réelle différence dans la qualité de votre modèle de données.


Que vous ajoutiez une référence client via Odoo Studio, définissiez un champ dans un module Python personnalisé ou créiez des champs par programmation via l'API, les modèles décrits dans ce guide vous aideront à bien faire les choses dès la première fois.


Un modèle de données bien conçu, basé sur les bons types de champs, est l'une des fondations les plus importantes d'une mise en œuvre réussie d'Odoo. Le champ Char est un petit morceau de ce puzzle, mais c'est un élément qu'il vaut la peine de comprendre correctement.

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 aider. Contactez-nous et parlons de votre projet Odoo.

Champ Char dans Odoo : Le Guide Complet
Dasolo 6 mars 2026
Partager cet article
Se connecter pour laisser un commentaire.