Se rendre au contenu

Champ d'image dans Odoo : Le guide complet

Un guide pratique sur le champ Image dans le modèle de données Odoo, de l'utilisation de base à la personnalisation technique et aux meilleures pratiques.
6 mars 2026 par
Champ d'image dans Odoo : Le guide complet
Dasolo
| Aucun commentaire pour l'instant

Introduction


Si vous avez déjà téléchargé une photo de produit, défini un logo d'entreprise ou attaché une photo de profil à un dossier d'employé dans Odoo, vous avez déjà interagi avec un champ Image. C'est l'un des types de champs les plus visuels dans le modèle de données Odoo, et il apparaît dans plus d'endroits que la plupart des utilisateurs ne le réalisent.


Pour les utilisateurs professionnels, cela fonctionne principalement sans problème. Vous cliquez sur un bouton, téléchargez un fichier et l'image apparaît dans le dossier. Mais pour les consultants et les développeurs configurant Odoo, il se passe beaucoup de choses en coulisses. Le champ Image a son propre mécanisme de stockage, un comportement de redimensionnement automatique et certaines nuances qu'il vaut la peine de comprendre avant de commencer à ajouter des champs d'image à des modèles personnalisés.


Ce guide couvre ce que le champ Image stocke, comment il se comporte dans le cadre Odoo, comment l'ajouter en utilisant Odoo Studio ou Python, et des exemples pratiques provenant de flux de travail commerciaux réels.

Qu'est-ce que le champ Image dans Odoo


Le champ Image est un type de champ dédié dans l'ORM Odoo, introduit sous fields.Image dans Odoo 13. Avant cette version, les développeurs utilisaient un champ fields.Binary combiné avec le widget image pour obtenir le même résultat. Aujourd'hui, le type de champ Image gère le cycle de vie complet du stockage d'images, y compris le redimensionnement automatique, de manière autonome.


En coulisses, le champ Image stocke des données binaires encodées en base64. Dans la base de données PostgreSQL, ces données sont enregistrées sous forme de colonne bytea ou, plus couramment dans les versions modernes d'Odoo, comme une pièce jointe de fichier liée à l'enregistrement. Ce stockage basé sur des pièces jointes maintient les principales tables de la base de données plus légères et permet à Odoo de servir des images efficacement via son système d'URL de pièces jointes.


À quoi cela ressemble dans l'interface

Dans une vue de formulaire, un champ Image se présente sous la forme d'un espace réservé d'image cliquable. Les utilisateurs peuvent télécharger un fichier directement depuis leur ordinateur, et dans certains cas, ils peuvent également coller une URL. Le champ affiche un aperçu miniature directement sur le formulaire, ce qui le rend facile à repérer d'un coup d'œil.


Dans les vues en liste, les champs Image sont rarement affichés car les miniatures dans les listes peuvent ralentir le chargement. Cependant, ils peuvent être affichés dans les vues kanban, où de petites mises en page basées sur des cartes bénéficient d'indicateurs visuels comme des photos de produits ou des avatars de contact.


Types de champs Odoo : Image vs Binaire

Il est important de connaître la distinction entre les deux. Un champ Binaire stocke tout type de fichier : PDF, tableurs, fichiers zip, etc. Le champ Image est spécifiquement conçu pour les fichiers image. Il applique un redimensionnement automatique lors de l'enregistrement, impose une validation spécifique aux images et se rend correctement avec le widget d'image par défaut. Si vous stockez des fichiers non-image, utilisez Binaire. Si vous stockez des photos ou des logos, utilisez Image.

Comment fonctionne le champ


Lorsqu'un utilisateur télécharge une image dans un champ Image, Odoo ne stocke pas simplement le fichier brut tel quel. Il traite d'abord l'image.


Redimensionnement automatique

La déclaration fields.Image accepte les paramètres max_width et max_height. Si l'image téléchargée dépasse ces dimensions, Odoo la redimensionne automatiquement tout en préservant le rapport d'aspect. Cela se produit de manière transparente lors de l'enregistrement, donc les utilisateurs n'ont jamais besoin d'y penser.

La taille maximale par défaut pour un champ Image standard est de 1920 pixels sur le côté le plus long. C'est pourquoi le champ est souvent nommé image_1920 sur les modèles Odoo standard comme product.template ou res.partner.


Variantes de taille d'image

Sur les modèles Odoo intégrés, vous verrez souvent un schéma de champs d'image associés à celui principal : image_1920, image_1024, image_512, image_256, et image_128. Ce sont des champs fields.Image séparés définis comme des champs liés pointant vers l'image principale, chacun avec des limites de taille différentes.


Cette approche permet à Odoo de servir la bonne taille d'image en fonction du contexte. Une page de liste de produits récupère la petite vignette image_128 pour garder les chargements de page rapides. Une page de détail de produit récupère la pleine image_1920 pour un affichage plus net. Pour les modèles personnalisés, vous pouvez ou non avoir besoin de ce schéma multi-tailles en fonction de la manière et de l'endroit où l'image sera affichée.


Stockage en tant que pièces jointes

Par défaut, les champs Image stockent leurs données en tant que pièces jointes de fichiers Odoo. Cela signifie que le contenu binaire vit dans le modèle ir.attachment plutôt que directement dans la table d'enregistrement. L'enregistrement détient une référence à la pièce jointe.


Pratiquement, cela garde les principales tables de base de données légères. Cela signifie également que les images sont accessibles via des URL prévisibles comme /web/image/product.template/42/image_1920, qui est le schéma utilisé dans les pages web, les modèles d'e-mails et les réponses API.


Contrôle d'accès

Les champs Image respectent les mêmes règles d'accès que le reste de l'enregistrement. Si un utilisateur n'a pas accès en lecture à un produit, il ne peut pas non plus récupérer son image. Cela est géré automatiquement par la couche de sécurité Odoo, ce qui est quelque chose à savoir lors de la création de portails destinés aux clients ou de pages de sites web publics.

Cas d'utilisation en entreprise


Le champ Image apparaît dans presque tous les modules Odoo. Voici quelques-unes des applications réelles les plus courantes.


1. Catalogue de produits (Ventes et Inventaire)

Les images de produits sont probablement l'utilisation la plus visible des champs Image dans Odoo. Chaque modèle de produit a un champ image_1920, et ces images apparaissent dans la boutique en ligne, sur les PDF de commandes de vente, dans les écrans de point de vente et dans les opérations de picking sur des appareils mobiles.

Les entreprises avec de grands catalogues utilisent souvent l'API pour télécharger en masse des images de produits plutôt que de les ajouter une par une via l'interface. Le champ Image accepte des données binaires encodées en base64, il est donc simple de télécharger des images par programme via XML-RPC ou JSON-RPC.


2. Logos de clients et de fournisseurs (CRM et Achats)

Le modèle res.partner a un champ Image utilisé pour les photos de contact et les logos d'entreprise. Cette image apparaît dans le formulaire du partenaire, dans la zone de discussion, et dans les cartes kanban CRM. Pour les équipes de vente travaillant avec de nombreux comptes, avoir des logos sur les enregistrements de contact facilite la navigation visuelle à travers la liste des clients.


3. Photos des employés (RH)

Le modèle hr.employee stocke une photo d'employé dans un champ Image. Cette photo apparaît dans l'annuaire des employés, sur les bulletins de salaire dans certaines configurations, et dans le module Odoo Discuss à côté des messages. Les équipes RH chargent souvent ces photos lors de l'intégration d'un grand nombre de nouveaux employés, en utilisant à nouveau l'importation en masse ou l'API.


4. Photos d'équipement et d'actifs (Maintenance)

Le module Maintenance permet d'attacher une image aux enregistrements d'équipement. Les techniciens de terrain trouvent utile d'avoir une photo de la machine directement sur l'ordre de maintenance, afin de pouvoir rapidement confirmer qu'ils travaillent sur le bon équipement avant de commencer une réparation.


5. Formulaires d'inspection ou de qualité personnalisés

Certaines entreprises construisent des modèles personnalisés dans Odoo pour des contrôles de qualité, des inspections de site ou des confirmations de livraison. Ajouter un champ Image à ces modèles permet au personnel de terrain de joindre une photo comme preuve directement sur l'enregistrement. C'est un modèle de personnalisation Odoo courant et cela fonctionne bien que le champ soit ajouté via Odoo Studio ou directement dans le code Python.

Créer ou personnaliser le champ


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


Utiliser Odoo Studio

Odoo Studio est l'outil de personnalisation sans code intégré. Pour ajouter un champ Image en utilisant Studio, ouvrez l'application concernée, activez Studio depuis le menu supérieur, et naviguez jusqu'à la vue de formulaire où vous souhaitez que le champ apparaisse.


Dans le panneau des champs à gauche, faites glisser un champ Image sur le formulaire. Studio vous demandera de lui donner une étiquette et créera automatiquement le champ sous-jacent sur le modèle. C'est l'approche recommandée pour les utilisateurs professionnels et les consultants fonctionnels qui souhaitent créer des champs dans Odoo sans impliquer un développeur.

Les champs créés via Studio sont préfixés par convention avec x_studio_, par exemple x_studio_site_photo. Ils se comportent exactement comme des champs Image natifs en termes de stockage et d'affichage.


Utiliser Python (développement Odoo)

Pour les personnalisations techniques, vous définissez les champs Image directement dans un fichier de modèle Python. Voici un exemple de base de la façon dont un développeur ajouterait un champ Image à un modèle personnalisé :


from odoo import models, fields

class SiteInspection(models.Model):
    _name = 'site.inspection'
    _description = 'Inspection de site'

    name = fields.Char(string='Référence', required=True)
    photo = fields.Image(
        string='Photo du site',
        max_width=1920,
        max_height=1920,
    )
    photo_128 = fields.Image(
        related='photo',
        max_width=128,
        max_height=128,
        store=True,
        string='Miniature',
    )

Les paramètres max_width et max_height indiquent à Odoo de limiter la taille stockée à 1920 pixels. Le deuxième champ, photo_128, est un champ lié qui stocke une version plus petite à utiliser dans les cartes kanban ou les vues en liste. C'est le modèle de développement standard d'Odoo pour gérer plusieurs tailles d'image sur un seul enregistrement.


Ajouter le champ à une vue

Une fois que le champ existe dans le modèle, il doit être ajouté à une vue pour être visible dans l'interface. Dans une vue de formulaire XML, vous affichez un champ Image en utilisant l'attribut widget="image" :

<field name="photo" widget="image" class="oe_avatar"/>

La classe oe_avatar le positionne comme un avatar circulaire dans le coin supérieur gauche du formulaire, ce qui est le style standard d'Odoo. Vous pouvez également l'utiliser sans la classe pour le placer en ligne dans une mise en page de formulaire.

Meilleures pratiques


Voici les recommandations que nous donnons aux clients lors de l'utilisation des champs Image dans Odoo.


Définir des limites de taille réalistes

La limite par défaut de 1920 pixels est appropriée pour la plupart des cas d'utilisation. Évitez de l'augmenter à moins d'avoir une raison valable, comme une photographie de produit en très haute résolution pour l'impression. Des images plus grandes signifient des pièces jointes plus volumineuses, ce qui affecte la taille de la base de données et les performances de chargement des pages.


Créer une variante miniature pour les listes et kanban

Si vous affichez l'image dans des vues en liste ou des cartes kanban, définissez un champ lié de petite taille séparé limité à 128 ou 256 pixels. Récupérer une miniature de 128 pixels est beaucoup plus rapide que de charger l'image complète de 1920 pixels pour chaque carte à l'écran.


Utilisez l'API pour les téléchargements d'images en masse

Lorsque vous devez charger des images pour des centaines ou des milliers d'enregistrements, ne le faites pas manuellement via l'interface. Utilisez l'API Odoo XML-RPC ou JSON-RPC pour écrire des données d'image encodées en base64 directement dans le champ. C'est beaucoup plus rapide et peut être automatisé dans un script. Le guide du développeur Odoo couvre bien ce modèle.


Compressez les images avant de les télécharger

Bien qu'Odoo redimensionne automatiquement les images, il ne les compresse pas toujours de manière agressive. Un JPEG de 5 Mo redimensionné à 1920 pixels peut encore faire plusieurs centaines de kilooctets. La pré-compression des images avant le téléchargement permet de garder les tailles des pièces jointes gérables, en particulier lors de la gestion de grands catalogues de produits.


Évitez les champs Image dans les vues en liste fréquemment interrogées

Inclure un champ Image dans une colonne de vue en liste oblige Odoo à récupérer des données binaires pour chaque ligne visible. Cela peut rendre les vues en liste sensiblement plus lentes. Utilisez une petite miniature si vous avez vraiment besoin d'un visuel dans une liste, et gardez l'image en taille réelle uniquement pour la vue de formulaire.


Pièges courants


Voici les erreurs que nous voyons le plus souvent lorsque les équipes commencent à travailler avec des champs Image dans Odoo.


Confondre les champs Binaire et Image

Un champ Binaire sans le widget image s'affichera comme un bouton de téléchargement, et non comme un aperçu de l'image. Si vous souhaitez un affichage d'image correct, vous avez besoin soit d'un type de champ fields.Image, soit d'un fields.Binary avec widget="image" explicitement défini dans la vue. Oublier cela est une source courante de confusion, surtout lorsque l'on travaille sur des versions plus anciennes d'Odoo.


Ne pas penser aux variantes de taille d'image assez tôt

Ajouter un seul champ Image large est facile, mais si vous réalisez plus tard que vous avez besoin de versions plus petites pour une vue kanban ou une liste de site web, l'ajout de ces champs liés nécessite une migration de base de données si vous êtes dans un module personnalisé. Planifier les variantes de taille à l'avance évite des maux de tête par la suite.


Stocker des images directement au lieu d'utiliser des pièces jointes

Dans les très anciennes versions d'Odoo ou les instances mal configurées, les données binaires pouvaient être stockées directement dans la colonne de la base de données plutôt que sous forme de pièces jointes. Cela augmente considérablement la taille des tables principales et ralentit les requêtes non liées. Assurez-vous que votre instance Odoo est configurée pour utiliser le stockage de fichiers ou un stockage compatible S3 pour les pièces jointes.


Utiliser des champs Image comme stockage de documents

Certains utilisateurs essaient de stocker des documents scannés ou des captures d'écran dans des champs Image. Bien que techniquement possible, ce n'est pas l'outil approprié. Pour la gestion des documents, utilisez le module Odoo Documents ou un champ Binaire avec un widget de téléchargement de fichiers. Les champs Image sont conçus pour des photos et des logos, pas pour stocker des documents multi-pages.


Oublier les règles d'accès sur les pages publiques

Si vous affichez des URL d'images sur un site web public ou dans un portail et que l'enregistrement sous-jacent n'est pas accessible aux utilisateurs publics, l'image renverra une erreur 404. Lors de la création de pages web ou de portails clients, vérifiez toujours que l'URL de l'image est accessible au public attendu.

Conclusion


Le champ Image est l'un des types de champs les plus simples à utiliser en surface, mais il a suffisamment de profondeur pour faire trébucher les équipes qui ne planifient pas à l'avance. Comprendre comment Odoo gère le redimensionnement, le stockage en tant que pièces jointes et le modèle de variante multi-tailles vous fera gagner du temps lors de la création ou de la configuration de modèles nécessitant des données visuelles.


Pour les utilisateurs professionnels, savoir que les images sont stockées en toute sécurité sur l'enregistrement et accessibles via des URL prévisibles aide lors de la configuration des pages web ou des vues de portail. Pour les développeurs, la combinaison de fields.Image avec des champs de vignettes associés est le modèle standard d'Odoo, et il vaut la peine de s'y habituer tôt.


Que vous ajoutiez une photo de produit à votre catalogue, que vous attachiez une photo d'inspection de site à un modèle personnalisé, ou que vous construisiez un portail client qui affiche des logos de contact, le champ Image vous offre un moyen propre et intégré de gérer des données visuelles au sein du modèle de données Odoo.

Besoin d'aide pour votre mise en œuvre d'Odoo ?


Chez Dasolo, nous aidons les entreprises à mettre en œuvre, personnaliser et optimiser Odoo à travers tous les modules et versions. Que vous ayez besoin de configurer des champs sur des modèles standard, de créer des modules personnalisés à partir de zéro, ou de migrer des données d'un système hérité, nous travaillons en étroite collaboration avec votre équipe pour faire fonctionner Odoo comme votre entreprise fonctionne réellement.

Si vous avez des questions sur votre configuration Odoo ou souhaitez explorer ce qui est possible avec la plateforme, contactez-nousNous sommes heureux de vous aider.

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