Se rendre au contenu

Champ entier dans Odoo : Le guide complet

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

Introduction


Si vous avez déjà défini une quantité sur une commande de vente, suivi combien de jours une tâche est restée ouverte, ou configuré un score de priorité sur un prospect, vous avez utilisé un champ entier dans Odoo. C'est l'un des types de champs les plus courants dans le modèle de données Odoo, et pourtant il est souvent sous-estimé.


Comprendre comment fonctionne le champ entier est important pour les utilisateurs commerciaux qui configurent des formulaires, pour les développeurs écrivant des modules personnalisés, et pour les consultants concevant des modèles de données pour leurs clients.


Ce guide couvre ce que le champ entier stocke, comment il se comporte dans le cadre et l'interface Odoo, comment le créer ou le personnaliser avec Odoo Studio ou Python, ainsi que des cas d'utilisation pratiques et des choses à surveiller.

Qu'est-ce que le champ entier dans Odoo


Dans l'ORM Odoo, le champ Integer est conçu pour stocker des nombres entiers. Pas de décimales, pas de fractions. Il correspond directement à une colonne INTEGER dans PostgreSQL, qui est un entier signé de 4 octets supportant des valeurs d'environ -2 milliards à +2 milliards.


Du point de vue de l'utilisateur, un champ Integer apparaît comme une simple entrée numérique dans les formulaires et comme une colonne de nombres dans les vues en liste. C'est le bon choix pour tout ce qui doit être compté en unités entières : quantités, scores, durées en jours, numéros de séquence, ou toute métrique où une demi-unité n'a pas de sens.


Voici une définition typique dans un module Python :

from odoo import fields, models

class ProjectTask(models.Model):
    _inherit = 'project.task'

    estimated_hours = fields.Integer(
        string='Heures Estimées',
        default=0,
    )

Le paramètre string contrôle l'étiquette affichée dans l'interface. Le paramètre default définit la valeur automatiquement lors de la création d'un nouvel enregistrement.


Dans Odoo Studio, ce type de champ est simplement répertorié comme Integer. Lorsqu'il est créé via Studio, il obtient un préfixe x_studio_. Lorsqu'il est créé via Python ou l'API XML-RPC, vous choisissez vous-même le nom technique.

Comment fonctionne le champ


Lorsque vous définissez un champ Integer dans Odoo, le framework crée automatiquement la colonne de base de données correspondante lors de l'installation ou de la mise à jour du module. Vous n'avez pas besoin d'écrire des migrations SQL manuellement.


Au niveau de la base de données, la colonne est typée comme INTEGER dans PostgreSQL. L'ORM Odoo s'occupe de la coercition de type, donc si l'utilisateur ne saisit rien, le champ retourne 0 plutôt que None ou False. C'est une distinction importante par rapport à d'autres types de champs comme Float ou Char, qui peuvent retourner False lorsqu'ils sont vides.


Attributs Clés du Champ

Voici les propriétés les plus importantes que vous pouvez configurer sur un champ Integer :

  • string : L'étiquette affichée aux utilisateurs dans l'interface.
  • default : La valeur automatiquement attribuée aux nouveaux enregistrements. Par défaut, c'est 0 si non spécifié.
  • requis : Rend le champ obligatoire. Puisque la valeur par défaut est déjà 0, cela est particulièrement utile lorsque vous souhaitez empêcher l'enregistrement avec une valeur nulle.
  • lecture seule : Empêche les utilisateurs de modifier la valeur directement dans l'interface.
  • index : Crée un index PostgreSQL sur la colonne, accélérant les filtres et les recherches sur ce champ.
  • calculer : Lie une méthode Python qui calcule la valeur du champ dynamiquement à partir d'autres champs.
  • stockage : Combiné avec calculer, contrôle si la valeur calculée est enregistrée dans la base de données ou recalculée à la volée.
  • copie : Contrôle si la valeur est transférée lors de la duplication d'un enregistrement.
  • groupes : Restreint la visibilité du champ à des groupes d'utilisateurs spécifiques.

Comment cela apparaît dans les vues

Dans les vues de formulaire, un champ entier s'affiche sous forme de zone de saisie numérique. Odoo ajoute automatiquement des séparateurs de milliers pour la lisibilité lors de l'affichage de nombres plus importants.


Dans les vues de liste, les champs entiers apparaissent comme des nombres simples, alignés à droite par convention. Dans les vues de recherche, ils prennent en charge les filtres d'égalité, de supérieur et d'inférieur.


Vous pouvez associer un champ entier avec des widgets spécifiques dans les vues pour changer son apparence. Le widget priorité, par exemple, transforme un champ entier en étoiles cliquables. Le widget barre de progression peut afficher une valeur entière sous forme de barre de progression lorsqu'il est combiné avec une valeur maximale.


Interaction avec l'ORM Odoo

Du point de vue d'un développeur, la lecture et l'écriture des champs Integer est simple. La valeur est toujours un int Python. Les champs Integer vides retournent 0, ce qui signifie que vous devez faire attention lorsque vous écrivez des conditions qui vérifient l'absence d'une valeur. Un zéro et un champ vide se ressemblent à moins que vous ne conceviez autour de cela.


Les champs Integer fonctionnent également naturellement dans les champs calculés et dans les filtres de domaine utilisés par les vues, les actions serveur et les actions automatisées dans tout le cadre Odoo.

Cas d'utilisation commerciale


Le champ Integer apparaît dans presque tous les modules d'Odoo. Voici cinq scénarios pratiques où il joue un rôle central.


1. CRM : Score des Leads

Les équipes de vente souhaitent souvent prioriser les leads en fonction d'un score. Vous pouvez ajouter un champ Integer personnalisé appelé Score des Leads sur le modèle d'opportunité CRM. Les représentants commerciaux mettent à jour le score manuellement, ou une action automatisée le calcule en fonction de critères tels que la taille de l'entreprise, le budget ou le niveau d'engagement.

Cela facilite le tri de votre pipeline par score et vous permet de vous concentrer sur les opportunités les plus prometteuses.


2. Ventes : Quantités Minimales de Commande

Dans les modules Ventes et Inventaire, les champs Integer contrôlent les quantités minimales de commande sur les produits ou les listes de prix. Fixer un minimum de 10 unités sur un produit garantit que le système bloque les commandes en dessous de ce seuil, évitant ainsi des allers-retours avec les clients par la suite.


3. Inventaire : Règles de Réapprovisionnement

Les règles de réapprovisionnement dans Odoo reposent entièrement sur des champs Integer pour les seuils de quantité minimale et maximale. Lorsque le stock tombe en dessous du minimum, Odoo déclenche automatiquement une commande de réapprovisionnement jusqu'au maximum défini. Obtenir ces valeurs correctement est crucial pour éviter à la fois les ruptures de stock et les situations de surstock.


4. Gestion de Projet : Points d'Histoire et Estimations d'Effort

Les équipes utilisant Odoo Project pour des flux de travail agiles ajoutent souvent un champ Integer personnalisé pour les points d'histoire ou les heures estimées. Ce champ apparaît sur les tâches dans la vue kanban ou liste et aide l'équipe à suivre la capacité et la vélocité à travers les sprints.


5. Comptabilité : Jours des conditions de paiement

Les conditions de paiement dans la comptabilité Odoo utilisent des champs entiers pour définir le nombre de jours autorisés pour le paiement. Net 30, Net 60 ou des conditions personnalisées sont toutes configurées via des valeurs entières. Ces valeurs alimentent directement les calculs de date d'échéance des factures, ce qui rend l'exactitude ici importante pour la gestion des flux de trésorerie.

Créer ou personnaliser le champ entier


Il existe deux principales façons d'ajouter un champ entier à un modèle Odoo : en utilisant Odoo Studio sans écrire de code, ou en le définissant directement en Python pour plus de contrôle.


Utilisation d'Odoo Studio

Odoo Studio est l'outil sans code et à faible code intégré dans Odoo pour personnaliser les champs et les vues. Pour ajouter un champ entier via Studio :

  1. Ouvrez le formulaire où vous souhaitez ajouter le champ.
  2. Activez Studio depuis le menu en haut à droite.
  3. Dans la liste des champs à gauche, faites glisser le type de champ Entier sur votre formulaire.
  4. Définissez l'étiquette du champ, choisissez s'il est requis et configurez la valeur par défaut.
  5. Enregistrez et quittez Studio.

Studio crée le champ avec un préfixe x_studio_ automatiquement et stocke la définition dans ir.model.fields. Le champ est immédiatement disponible dans les formulaires et les vues de liste.


Utilisation de Python (Personnalisation technique)

Pour les développeurs construisant des modules personnalisés ou effectuant un développement Odoo avec plus de contrôle, le champ Integer est défini directement dans une classe de modèle Python :


from odoo import fields, models

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

    x_lead_score = fields.Integer(
        string='Score de Lead',
        default=0,
        index=True,
        help='Score de 0 à 100 utilisé pour prioriser les opportunités',
    )

Après avoir défini le champ dans le code, exécutez odoo-bin -u votre_module pour appliquer les modifications à la base de données. La colonne est créée automatiquement.


Utilisation de l'API XML-RPC

Vous pouvez également créer un champ Integer à distance en utilisant l'API XML-RPC d'Odoo. Cela est utile pour les déploiements automatisés ou lorsque vous travaillez sans accès direct au serveur :


field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_lead_score',
        'field_description': 'Score de Lead',
        'model_id': crm_lead_model_id,
        'ttype': 'integer',
        'state': 'manual',
    }]
)

La valeur ttype pour les champs Integer est simplement 'integer'. L'state doit être 'manual' pour indiquer un champ personnalisé plutôt qu'un champ défini par un module.


Ajout d'un Champ Integer Calculé

Les champs Integer calculés sont puissants pour dériver des valeurs automatiquement. Par exemple, compter le nombre de tâches liées à un projet :


class Project(models.Model):
    _inherit = 'project.project'

    open_task_count = fields.Integer(
        string='Tâches Ouvertes',
        compute='_compute_open_task_count',
        store=True,
    )

    def _compute_open_task_count(self):
        for project in self:
            project.open_task_count = self.env['project.task'].search_count([
                ('project_id', '=', project.id),
                ('stage_id.fold', '=', False),
            ])

Définir store=True enregistre la valeur dans la base de données, la rendant disponible pour le filtrage et le tri dans les vues de liste sans la recalculer à chaque fois.

Meilleures pratiques


Voici des conseils pratiques pour tirer le meilleur parti des champs Integer dans votre modèle de données Odoo.


Utilisez un entier pour les comptes et les quantités en unités entières

Choisissez un entier lorsque la valeur doit toujours être un nombre entier et que les décimales n'ont pas de sens. Pour tout ce qui concerne l'argent, les mesures ou les quantités qui peuvent être fractionnaires, utilisez plutôt le type de champ Float ou Monétaire.


Définissez une valeur par défaut raisonnable

Les champs entiers ont par défaut 0 dans Odoo. Dans de nombreux cas, cela convient, mais réfléchissez à la pertinence de zéro en fonction de votre cas d'utilisation. Si zéro signifie quelque chose de spécifique (comme aucun score attribué pour le moment), vous voudrez peut-être le gérer explicitement dans votre logique métier ou ajouter un champ booléen d'aide pour suivre si la valeur a été définie.


Ajoutez un index lorsque vous filtrez sur le champ

Si vous prévoyez de filtrer, trier ou regrouper fréquemment par un champ entier, ajoutez index=True dans la définition du champ. Cela crée un index de base de données et peut considérablement accélérer les requêtes sur de grands ensembles de données. Le compromis est une légère augmentation du stockage et du temps d'écriture, ce qui en vaut presque toujours la peine pour les champs utilisés dans les conditions de recherche.


Utilisez store=True pour les champs entiers calculés

Si vous définissez un champ entier calculé sur lequel les utilisateurs doivent filtrer ou trier dans les vues en liste, définissez toujours store=True. Sans cela, Odoo ne peut pas utiliser le champ dans les filtres de domaine, et le regroupement par celui-ci ne fonctionnera pas comme prévu.


Documentez vos plages

Lorsqu'un champ entier a une plage significative, comme un score de 0 à 100, documentez cela dans le paramètre help. Ce texte apparaît comme une info-bulle dans l'interface et évite aux utilisateurs de deviner quelles valeurs sont valides.


Réfléchissez à deux fois avant d'utiliser un entier pour les ID ou les références

Si vous devez référencer un autre enregistrement, utilisez un champ Many2one au lieu de stocker un ID dans un champ entier manuellement. Les champs Many2one vous offrent une navigation intégrée, des règles en cascade et une intégration ORM appropriée. Un entier contenant un ID brut est fragile et contourne le cadre Odoo.

Pièges courants


Voici les erreurs qui se produisent le plus souvent lors de l'utilisation des champs Integer dans Odoo.


Confondre Integer avec Float

Une erreur courante consiste à utiliser un champ Integer là où un champ Float serait plus approprié. Si vos utilisateurs doivent un jour entrer 1,5, 0,25 ou toute valeur fractionnaire, Integer est le mauvais choix. Odoo tronquera silencieusement les entrées décimales, ce qui entraîne une perte de données et de la confusion pour l'utilisateur. Utilisez Float pour les quantités qui peuvent être fractionnaires, et Monetary pour les valeurs monétaires.


Supposer que Zéro signifie Vide

Parce que les champs Integer renvoient toujours 0 lorsqu'ils ne sont pas définis, il n'y a aucun moyen de distinguer entre un enregistrement où le champ n'a jamais été rempli et un où quelqu'un a intentionnellement entré zéro. Si cette distinction est importante pour votre flux de travail, ajoutez un champ Booléen comme has_score à côté de l'Integer, ou utilisez un champ Float avec une valeur par défaut False à la place.


Ne pas ajouter d'index sur les champs fréquemment filtrés

Si vous ajoutez un champ Integer et l'utilisez plus tard comme filtre dans des vues ou des actions automatisées, oublier d'ajouter index=True peut ralentir considérablement les vues de liste sur de plus grandes bases de données. Il est plus facile d'ajouter l'index dès le départ que d'optimiser plus tard.


Utiliser Integer pour stocker des ratios basés sur des décimales

Parfois, les développeurs stockent des pourcentages sous forme de champs Integer, écrivant 75 pour signifier 75 %. Cela fonctionne jusqu'à ce que quelqu'un ait besoin de 72,5 %, moment où le champ ne respecte plus l'exigence. S'il y a une chance qu'un pourcentage ou un ratio ait besoin de précision décimale, utilisez Float dès le départ.


Oublier store=True sur les champs calculés utilisés dans les filtres

C'est l'une des erreurs les plus courantes dans le développement Odoo. Un champ Integer calculé sans store=True ne peut pas être utilisé dans des filtres de domaine, des actions automatisées ou des opérations group-by dans les vues de liste. Pensez toujours à l'endroit où le champ sera utilisé avant de décider s'il faut le stocker.

Conclusion


Le champ Integer est un élément fondamental dans le modèle de données Odoo. Il semble simple, et dans la plupart des cas, c'est le cas. Mais connaître ses comportements spécifiques, comme le fait que les champs vides renvoient 0 et que les champs calculés ont besoin de store=True pour fonctionner dans les filtres, vous aide à éviter les types de bogues et de problèmes de conception qui sont faciles à introduire et plus difficiles à corriger par la suite.


Que vous configuriez Odoo pour une équipe de vente, que vous construisiez un module personnalisé ou que vous conceviez des règles de réapprovisionnement pour un entrepôt, les champs entiers apparaîtront à chaque étape. Comprendre comment ils fonctionnent dans l'ORM Odoo, comment les créer avec Studio ou Python, et quand les utiliser par rapport à Float ou Monétaire fait partie de ce qui rend une implémentation Odoo solide et maintenable.


Si vous travaillez sur une personnalisation Odoo et souhaitez vous assurer que votre modèle de données est construit correctement dès le départ, ce type de connaissance fondamentale porte ses fruits tout au long de la durée de vie du projet.

Travailler avec un expert Odoo


Chez Dasolo, nous aidons les entreprises à mettre en œuvre, personnaliser et optimiser Odoo dans tous les modules et secteurs. Que vous ayez besoin de concevoir un modèle de données propre, de créer des champs et des flux de travail personnalisés, ou de connecter Odoo à des systèmes externes via l'API, nous apportons l'expérience nécessaire pour bien le faire.


Si vous avez des questions concernant votre configuration Odoo ou souhaitez discuter d'un projet, contactez notre équipe . Nous sommes heureux de vous aider.

Champ entier dans Odoo : Le guide complet
Dasolo 6 mars 2026
Partager cet article
Se connecter pour laisser un commentaire.