Se rendre au contenu

Le modèle product.template : Comprendre l'architecture des produits d'Odoo

Un guide complet sur le modèle de template de produit d'Odoo pour les développeurs et les consultants fonctionnels.
10 mars 2026 par
Le modèle product.template : Comprendre l'architecture des produits d'Odoo
Dasolo
| Aucun commentaire pour l'instant

Introduction


Dans Odoo, les modèles définissent comment les données sont structurées et stockées dans la base de données. Chaque élément de données commerciales avec lequel vous travaillez, des commandes de vente aux factures en passant par les produits, vit dans un modèle.


Comprendre les modèles Odoo est essentiel tant pour les développeurs que pour les consultants fonctionnels. Les modèles sont la base de l'architecture des données d'Odoo. Ils définissent les champs Odoo, les relations et la logique commerciale. Chaque modèle dans Odoo suit les mêmes schémas.


Cet article se concentre sur l'un des modèles les plus importants d'Odoo : product.template. Que vous construisiez des modules personnalisés, intégriez des systèmes externes ou configuriez des catalogues de produits, vous travaillerez avec ce modèle.

Qu'est-ce que le modèle product.template


Le modèle product.template représente un groupe de produits similaires qui ne diffèrent que par quelques propriétés, telles que la taille ou la couleur. Plutôt que de créer des enregistrements de produits séparés pour chaque variation, les produits sont organisés en modèles avec des variantes.


Ce modèle dans Odoo est utilisé dans les ventes, les achats, l'inventaire, le commerce électronique et la fabrication. Lorsque vous créez un produit dans le catalogue, vous créez un enregistrement product.template. Lorsque vous créez une commande client, vous sélectionnez parmi les variantes de produits qui héritent du modèle.


Le modèle est défini dans le module produit. D'autres modules l'étendent par le biais de l'héritage de modèle Odoo. La vente ajoute la tarification et la facturation. L'achat ajoute la gestion des fournisseurs. L'inventaire ajoute le suivi des stocks. Chaque module ajoute ce dont il a besoin sans dupliquer la structure de base.

Comprendre la différence entre product.template et product.product est essentiel. Le modèle contient des données partagées. La variante (product.product) contient des données spécifiques à la variante comme le code-barres et le SKU.

Champs clés dans le modèle


Voici les champs Odoo les plus importants dans le modèle product.template. Comprendre ceux-ci vous aidera à travailler efficacement avec les produits.


1. nom

Type : Char. Ce champ stocke le nom du produit. Il est affiché dans de nombreuses vues Odoo et est l'identifiant principal pour le modèle de produit.


2. date_de_creation

Type : Datetime. Stocke la date et l'heure auxquelles l'enregistrement a été créé. Géré automatiquement par Odoo. Utile pour les rapports et les audits.


3. date_de_modification

Type : Datetime. Stocke la date et l'heure de la dernière modification. Également géré automatiquement. Aide à suivre quand les données ont été mises à jour pour la dernière fois.


4. actif

Type: Booléen. Indicateur de suppression douce. Lorsque Faux, l'enregistrement est archivé et caché des vues par défaut. Les enregistrements ne sont pas physiquement supprimés.


5. séquence

Type: Entier. Ordre d'affichage pour le tri. Utilisé dans les listes de produits et les menus déroulants. Les valeurs plus basses apparaissent en premier.


6. type

Type: Sélection. Type de produit : Consommable, Service ou Produit Stockable. Les consommables ne sont pas suivis en stock. Les services n'ont pas d'inventaire physique. Les produits stockables sont suivis en inventaire.


7. categ_id

Type: Many2one (product.category). La catégorie de produit. Influence les rapports, les itinéraires par défaut et l'organisation du catalogue. Les catégories peuvent être hiérarchiques.


8. list_price

Type: Flottant. Le prix de vente. Utilisé par défaut lors de la création de devis. Peut être remplacé par des listes de prix ou des prix spécifiques aux variantes.


9. standard_price

Type: Flottant. Le prix de coût. Utilisé pour les calculs de marge et l'évaluation des stocks. Affecte les rapports de rentabilité.


10. currency_id

Type: Many2one (res.currency). La devise pour list_price et standard_price. Généralement héritée de l'entreprise.


11. uom_id

Type: Many2one (uom.uom). L'unité de mesure pour les ventes. Définit comment les quantités sont exprimées (par exemple, unités, Kg, litres).


12. uom_po_id

Type: Many2one (uom.uom). L'unité de mesure pour les achats. Peut différer de uom_id pour des scénarios de conversion.


13. default_code

Type: Char. Référence interne ou code. Utile pour le mapping avec des systèmes externes et la numérotation personnalisée. Souvent utilisé comme SKU.


14. barcode

Type: Char. Code-barres pour le scan. Utilisé dans le POS, l'entrepôt et l'inventaire. Pour les variantes, le code-barres est généralement sur product.product.


15. description

Type: Char. Description interne. Visible uniquement pour les utilisateurs internes. Utilisé pour des notes internes sur le produit.


16. description_sale

Type: Texte. Description de vente. Affichée sur les devis et les factures. Peut inclure du HTML pour le formatage.


17. description_achat

Type: Texte. Description d'achat. Affichée sur les bons de commande et les factures fournisseurs. Aide les acheteurs à communiquer avec les fournisseurs.


18. vente_ok

Type: Booléen. Indique si le produit peut être vendu. Lorsque False, le produit est masqué des formulaires de vente et de devis.


19. achat_ok

Type: Booléen. Indique si le produit peut être acheté. Lorsque False, le produit est masqué des formulaires d'achat.


20. poids

Type: Flottant. Poids du produit. Utilisé pour les calculs d'expédition et la logistique. L'unité dépend des paramètres UoM de l'entreprise.


21. volume

Type: Flottant. Volume du produit. Utilisé pour la logistique et la planification de la capacité d'entrepôt.


22. identifiants_variantes_produit

Type: One2many (product.product). La liste des variantes de produit. Chaque variante hérite du modèle.


23. product_variant_count

Type: Entier. Nombre de variantes. Calculé à partir de product_variant_ids. Utilisé pour l'affichage et le filtrage.


24. image_1920

Type: Binaire. Image du produit. Odoo stocke plusieurs tailles. Utilisé dans les formulaires, les rapports et le site web.


25. responsible_id

Type: Many2one (res.users). L'utilisateur responsable. Utilisé pour la gestion des produits et l'attribution des activités.


26. company_id

Type: Many2one (res.company). Dans les configurations multi-entreprises, cela indique à quelle entreprise Odoo appartient le produit.


27. tax_ids

Type: Many2many (account.tax). Taxes clients pour les ventes. Appliquées sur les factures et les devis.


28. supplier_tax_id

Type: Many2many (account.tax). Taxes fournisseurs pour les achats. Appliqué sur les factures fournisseurs.


29. attribute_line_ids

Type: One2many. Lignes d'attributs de produit pour les variantes. Définit quels attributs (par exemple, Taille, Couleur) créent des variantes.


30. route_ids

Type: Many2many (stock.route). Itinéraires de stock. Détermine comment le produit se déplace à travers la chaîne d'approvisionnement (par exemple, Acheter, Fabriquer sur commande).


31. property_stock_production

Type: Many2one (stock.location). Emplacement de production pour les produits fabriqués. Utilisé lorsque le type est Stockable et que l'itinéraire inclut la fabrication.


32. property_stock_inventory

Type: Many2one (stock.location). Emplacement d'ajustement d'inventaire. Utilisé pour les comptages de stock et les corrections.


33. property_valuation

Type: Sélection. Méthode d'évaluation des stocks : Automatisée ou Manuelle. Affecte la manière dont le coût est calculé.


34. property_cost_method

Type : Sélection. Méthode de coût : Standard ou FIFO. Détermine comment la valeur des stocks est calculée.


35. property_account_income_id

Type : Many2one (account.account). Compte de revenus pour les ventes. Utilisé lors de la facturation.


36. property_account_expense_id

Type : Many2one (account.account). Compte de dépenses pour les achats. Utilisé lors de la réception des factures fournisseurs.


37. invoice_policy

Type : Sélection. Quand facturer : Quantités commandées ou Quantités livrées. Affecte le moment où les revenus sont reconnus.


38. expense_policy

Type : Sélection. Quand comptabiliser les dépenses : Commandé ou Livré. Affecte le moment où les coûts sont reconnus.


39. service_type

Type : Sélection. Pour les produits de service : Manuel, Feuille de temps ou Jalons. Détermine comment les services sont suivis et facturés.


40. optional_product_ids

Type : Many2many (product.template). Produits optionnels pour la vente incitative. Affiché lors de l'ajout de ce produit à un devis.

Comment ce modèle est utilisé dans les workflows d'entreprise


1. Ventes et Devis

Lorsqu'un commercial crée un devis, il sélectionne des produits dans le catalogue. Le modèle product.template fournit le produit de base. Les variantes sont choisies lorsque le produit a des attributs (taille, couleur).


2. E-commerce

Sur le site web, les clients voient des modèles de produits dans le catalogue. Lorsqu'ils cliquent sur un produit, ils peuvent choisir parmi les variantes. Le modèle contient la description et les images partagées.


3. Achats et Fournisseurs

Les commandes d'achat et les factures fournisseurs sont liées à product.template. Le champ purchase_ok contrôle la visibilité. Le supplier_tax_id et uom_po_id influencent le comportement d'achat.


4. Inventaire et Fabrication

Les mouvements de stock et les ordres de fabrication font référence aux variantes de produit. Le modèle définit les itinéraires, l'évaluation et la méthode de coût. L'inventaire est suivi par variante.


5. Facturation

Les factures et les factures font référence aux lignes de produits. Le modèle fournit des règles fiscales et des comptes comptables. La politique de facturation détermine quand les revenus sont reconnus.

Comment les développeurs étendent ce modèle


Les développeurs étendent product.template en utilisant plusieurs modèles. L'héritage de modèle Odoo est le principal mécanisme.


Héritage de Modèle

Utilisez _inherit = 'product.template' pour étendre le modèle. C'est l'héritage de modèle Odoo en action. Ajoutez de nouveaux champs Odoo, remplacez des méthodes ou ajoutez des contraintes. Le modèle hérité dans Odoo conserve vos modifications dans un module séparé pour des mises à jour faciles. Lorsque vous héritez d'un modèle dans Odoo, vous l'étendez sans modifier l'original.


Ajout de Champs

Définissez de nouveaux champs Odoo dans votre modèle hérité. Utilisez le bon type de champ : Char, Many2one, Boolean, Integer, Text, Selection. Considérez les champs dépendants de l'entreprise pour une multi-entreprise.


Extensions Python

Remplacez create, write ou unlink pour ajouter de la logique. Utilisez super() pour appeler l'original. Faites attention aux champs calculés et à leurs dépendances.


Odoo Studio

Odoo Studio vous permet d'ajouter des champs sans code. Bon pour des personnalisations rapides. Pour une logique complexe ou des mises à jour, les modules personnalisés sont plus maintenables.

Meilleures pratiques


  • Utilisez correctement la relation template-variant. Mettez les données partagées sur le modèle, les données spécifiques à la variante sur product.product.
  • Définissez categ_id pour un routage et un reporting appropriés. Les catégories déterminent le comportement par défaut.
  • Utilisez default_code pour le mappage avec des systèmes externes. Gardez-le unique si possible.
  • Lors de la création d'intégrations API, utilisez l'API XML-RPC ou JSON-RPC. Le modèle product.template est entièrement exposé en tant que modèle API dans Odoo. Mappez les ID externes avec soin.
  • Pour les champs personnalisés, utilisez le préfixe x_ ou un préfixe de module pour éviter les conflits avec les futures versions d'Odoo.

Erreurs courantes


  • Créer des modèles en double au lieu d'utiliser des variantes. Utilisez attribute_line_ids pour les produits qui diffèrent uniquement par la taille, la couleur, etc.
  • Confondre product.template et product.product. Lorsque vous avez besoin de données spécifiques à la variante (code-barres, SKU), utilisez product.product.
  • Oublier de définir sale_ok ou purchase_ok. Les produits sont cachés des formulaires lorsque ceux-ci sont False.
  • Surcharger des méthodes de base sans appeler super(). Cela peut casser d'autres modules ou des mises à jour futures.
  • Ajouter des champs personnalisés requis sans valeurs par défaut. Les enregistrements existants échoueront à la validation lors de la mise à jour.

Conclusion


Le modèle product.template est central pour Odoo. Il stocke les définitions de produits et les attributs partagés. Comprendre ses champs et comment les modules l'étendent vous aidera à configurer, personnaliser et intégrer Odoo efficacement.


Que vous soyez un consultant fonctionnel cartographiant des catalogues de produits ou un développeur construisant des modules personnalisés, une bonne compréhension de product.template vous fera gagner du temps et évitera des erreurs.

Commencer avec Dasolo


Dasolo aide les entreprises à mettre en œuvre, personnaliser et optimiser Odoo. Nous nous spécialisons dans les intégrations API et le développement Odoo. Notre équipe a une grande expérience de l'architecture des données Odoo et des modèles comme product.template.


Si vous avez besoin d'aide pour votre mise en œuvre Odoo, vos modules personnalisés ou vos intégrations, nous sommes là pour vous aider. Réservez une démo pour discuter de votre projet.

Le modèle product.template : Comprendre l'architecture des produits d'Odoo
Dasolo 10 mars 2026
Partager cet article
Se connecter pour laisser un commentaire.