product.product : champs, relations et API
Le modèle product.product (« Variante de produit ») est un modèle persistant déclaré par le module Produits & Listes de prix, puis enrichi par 35 autres modules. Il expose 137 champs, dont 108 déclarés directement sur le modèle ; 93 champs d'autres modèles pointent vers lui. Retrouvez ci-dessous chaque champ avec son nom technique, son type, son libellé français et ses relations, puis un exemple d'appel à l'API JSON-2 d'Odoo 19.
Fiche d'identité
- Nom technique
product.product- Libellé
- Variante de produit
- Type
- Persistant (models.Model)
- Table SQL
product_product- Module d'origine
- Produits & Listes de prix (
product) - Étendu par
- account, sale, stock, stock_account, event_product, event_booth_sale, hr_expense, point_of_sale, loyalty, mrp, mrp_account, purchase, purchase_stock, product_expiry, repair, mrp_subcontracting, mrp_subcontracting_account, stock_dropshipping, mrp_subcontracting_purchase, pos_hr, pos_loyalty, pos_self_order, product_margin, sale_project, purchase_requisition, sale_edi_ubl, sale_gelato, sale_timesheet, website_sale, website_sale_slides, website_event_sale, website_sale_stock, website_sale_wishlist, website_sale_comparison, website_sale_loyalty
- Tri par défaut (_order)
default_code, name, id- Hérite de (mixins)
- mail.threadmail.activity.mixinpos.load.mixin
- Délégation (_inherits)
- product.template : les champs de ce modèle sont aussi accessibles, via
product_tmpl_id
Champs du modèle
108 champs propres, 24 hérités des mixins et 5 champs automatiques de l'ORM. Cliquez sur un nom pour obtenir le lien direct vers le champ.
137 champs affichés sur 137
| Nom technique | Libellé | Type | Détails |
|---|---|---|---|
| active | Actif Décocher cette case vous permet de masquer le produit sans le supprimer. | boolean | |
| additional_product_tag_ids | Étiquettes variantes | many2many | |
| all_product_tag_ids | Toutes les étiquettes de produit | many2many | calculé |
| avg_cost | Coût moyen | monetary | calculé ajouté par WMS Comptabilité ( |
| barcode | Code-barres Numéro d'article international (IAN) utilisé pour identifier cet article. | char | |
| base_unit_count | Nombre d'unités de base Afficher le prix unitaire de base sur vos pages d'eCommerce. Configurez le prix sur 0 pour le cacher pour ce produit. | float | requis ajouté par eCommerce ( |
| base_unit_id | Unité de mesure personnalisée Définissez une unité personnalisée à afficher dans le champ Prix par unité de mesure. | many2one | ajouté par eCommerce ( |
| base_unit_name | Nom de l'unité de base Affiche l'unité personnalisée pour les produits si elle est définie ou l'unité de mesure sélectionnée dans le cas contraire. | char | calculé ajouté par eCommerce ( |
| base_unit_price | Prix unitaire | monetary | calculé ajouté par eCommerce ( |
| bom_count | # Nomenclatures | integer | calculé ajouté par Fabrication ( |
| bom_line_ids | Composants de nomenclature | one2many | inverse : ajouté par Fabrication ( |
| can_image_1024_be_zoomed | L'Image 1024 peut être agrandie | boolean | calculé |
| can_image_variant_1024_be_zoomed | Peut-on agrandir l'image 1024 | boolean | calculé, stocké |
| channel_ids | Cours | one2many | inverse : ajouté par Vendre des cours ( |
| code | Référence | char | calculé |
| combination_indices | Indices combinés | char | calculé, stocké |
| company_currency_id | Devise de la valorisation Champ technique pour afficher correctement la devise sélectionnée actuellement par l'entreprise qui correspond à la valeur totale des couches de valorisation du produit | many2one | calculé ajouté par WMS Comptabilité ( |
| date_from | Marge depuis | date | calculé ajouté par Marges par produit ( |
| date_to | Marge jusqu'à | date | calculé ajouté par Marges par produit ( |
| default_code | Référence interne | char | |
| event_ticket_ids | Tickets d'événement | one2many | inverse : ajouté par Produit événements ( |
| expected_margin | Marge attendue Vente attendue - Coût normal | float | calculé ajouté par Marges par produit ( |
| expected_margin_rate | Marge attendue (%) Marge attendue * 100 / Vente attendue | float | calculé ajouté par Marges par produit ( |
| free_qty | Quantité virtuellement disponible Available quantity (computed as Quantity On Hand - reserved quantity - quantity to remove) In a context with a single Stock Location, this includes goods stored in this location, or any of its children. In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children. Otherwise, this includes goods stored in any Stock Location with 'internal' type. | float | calculé ajouté par Inventaire ( |
| gelato_product_uid | Uid du produit Gelato | char | lecture seule ajouté par Gelato ( |
| image_1024 | Image 1024 | image | calculé |
| image_128 | Image 128 | image | calculé |
| image_1920 | Image | image | calculé |
| image_256 | Image 256 | image | calculé |
| image_512 | Image 512 | image | calculé |
| image_variant_1024 | Image de variante 1024 | image | related : |
| image_variant_128 | Image de variante 128 | image | related : |
| image_variant_1920 | Image de la variante | image | |
| image_variant_256 | Image de variante 256 | image | related : |
| image_variant_512 | Image de variante 512 | image | related : |
| import_attribute_values | Valeurs du produit | char | calculé |
| incoming_qty | Entrant Quantity of planned incoming products. In a context with a single Stock Location, this includes goods arriving to this Location, or any of its children. In a context with a single Warehouse, this includes goods arriving to the Stock Location of this Warehouse, or any of its children. Otherwise, this includes goods arriving to any Stock Location with 'internal' type. | float | calculé ajouté par Inventaire ( |
| invoice_state | Statut de la facture | selection | lecture seulecalculé Valeurs : ajouté par Marges par produit ( |
| is_favorite | Est favori | boolean | related : |
| is_in_purchase_order | Bon de commande fournisseur | boolean | calculé ajouté par Achats ( |
| is_in_selected_section_of_order | Est dans la section sélectionnée de la commande | boolean | |
| is_kits | Est un kit | boolean | calculé ajouté par Fabrication ( |
| is_product_variant | Est une variante de produit | boolean | calculé |
| lot_properties_definition | Propriétés du lot | properties_definition | ajouté par Inventaire ( |
| lst_price | Prix de vente Le prix de vente est géré à partir du modèle de produit. Cliquez sur le bouton 'Configurer les variantes' pour définir les prix des attributs supplémentaires. | float | calculé |
| monthly_demand | Demande mensuelle | float | calculé ajouté par Achats Inventaire ( |
| mrp_product_qty | Fabriqué | float | calculé ajouté par Fabrication ( |
| nbr_moves_in | Nbre d'entrées Nombre de mouvements entrants au cours des 12 derniers mois | integer | calculé ajouté par Inventaire ( |
| nbr_moves_out | Nbre de sorties Nombre de mouvements sortants au cours des 12 derniers mois | integer | calculé ajouté par Inventaire ( |
| nbr_reordering_rules | Règles de réapprovisionnement | integer | calculé ajouté par Inventaire ( |
| normal_cost | Coût normal Somme de la multiplication du prix de revient par la quantité dans les factures fournisseurs | float | calculé ajouté par Marges par produit ( |
| orderpoint_ids | Règles de stock minimum | one2many | inverse : ajouté par Inventaire ( |
| outgoing_qty | Sortant Quantity of planned outgoing products. In a context with a single Stock Location, this includes goods leaving this Location, or any of its children. In a context with a single Warehouse, this includes goods leaving the Stock Location of this Warehouse, or any of its children. Otherwise, this includes goods leaving any Stock Location with 'internal' type. | float | calculé ajouté par Inventaire ( |
| partner_ref | Réf. client | char | calculé |
| price_extra | Prix supplémentaires des variantes Il s'agit de la somme des suppléments de prix de tous les attributs. | float | calculé |
| pricelist_rule_ids | Règles de liste de prix | one2many | calculé inverse : |
| product_catalog_product_is_in_bom | Produit du catalogue produit se trouve dans la nomenclature | boolean | calculé ajouté par Fabrication ( |
| product_catalog_product_is_in_mo | Produit du catalogue produit se trouve dans l'ordre de fabrication | boolean | calculé ajouté par Fabrication ( |
| product_catalog_product_is_in_repair | Produit du catalogue produit en cours de réparation | boolean | calculé ajouté par Réparations ( |
| product_catalog_product_is_in_sale_order | Produit du catalogue produit se trouve dans la commande client | boolean | calculé ajouté par Ventes ( |
| product_document_count | Nombre de documents | integer | calculé |
| product_document_ids | Documents | one2many | inverse : |
| product_template_attribute_value_ids | Valeurs d'attribut | many2many | |
| product_template_variant_value_ids | Valeurs de la variante | many2many | |
| product_tmpl_id | Modèle de produit | many2one | requis |
| product_uom_ids | Code-barres de l'unité | one2many | inverse : |
| product_variant_image_ids | Images supplémentaires pour la variante | one2many | inverse : ajouté par eCommerce ( |
| purchase_avg_price | Prix d'achat unitaire moyen Prix moyen dans les factures fournisseurs | float | calculé ajouté par Marges par produit ( |
| purchase_gap | Écart des achats Coût normal - Coût total | float | calculé ajouté par Marges par produit ( |
| purchase_num_invoiced | # facturé à l'achat Somme de la quantité dans les factures fournisseurs | float | calculé ajouté par Marges par produit ( |
| purchase_order_line_ids | Lignes de bon de commande | one2many | inverse : ajouté par Achats Inventaire ( |
| purchased_product_qty | Acheté | float | calculé ajouté par Achats ( |
| putaway_rule_ids | Stratégies de rangement | one2many | inverse : ajouté par Inventaire ( |
| qty_available | Quantité disponible Current quantity of products. In a context with a single Stock Location, this includes goods stored at this Location, or any of its children. In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children. stored in the Stock Location of the Warehouse of this Shop, or any of its children. Otherwise, this includes goods stored in any Stock Location with 'internal' type. | float | calculé ajouté par Inventaire ( |
| reordering_max_qty | Qté de réapprovisionnement max. | float | calculé ajouté par Inventaire ( |
| reordering_min_qty | Qté de réapprovisionnement min. | float | calculé ajouté par Inventaire ( |
| sale_avg_price | Prix de vente unitaire moyen Prix moyen dans les factures clients. | float | calculé ajouté par Marges par produit ( |
| sale_expected | Vente attendue Somme de la multiplication du prix catalogue de vente par la quantité dans les factures clients | float | calculé ajouté par Marges par produit ( |
| sale_num_invoiced | # facturé à la vente Somme de la quantité dans les factures clients | float | calculé ajouté par Marges par produit ( |
| sales_count | Vendu | float | calculé ajouté par Ventes ( |
| sales_gap | Écart des ventes Vente attendue - Chiffre d'affaires | float | calculé ajouté par Marges par produit ( |
| show_forecasted_qty_status_button | Bouton d'Affichage de la Qté prévue | boolean | calculé ajouté par Inventaire ( |
| show_on_hand_qty_status_button | Montrer le Bouton de Statut Qté disponible | boolean | calculé ajouté par Inventaire ( |
| show_qty_update_button | Afficher le bouton de mise à jour des quantités | boolean | calculé ajouté par Inventaire ( |
| standard_price | Coût Value of the product (automatically computed in AVCO). Used to value the product when the purchase cost is not known (e.g. inventory adjustment). Used to compute margins on sale orders. | float | dépend de la société |
| standard_price_update_warning | Avertissement pour la mise à jour du prix standard | char | calculé ajouté par Dépenses ( |
| stock_move_ids | Mouvement de stock | one2many | inverse : ajouté par Inventaire ( |
| stock_notification_partner_ids | Notifications de retour en stock | many2many | ajouté par Disponibilité des produits ( |
| stock_quant_ids | Quant de stock | one2many | inverse : ajouté par Inventaire ( |
| storage_category_capacity_ids | Capacité de la catégorie d'emplacement | one2many | inverse : ajouté par Inventaire ( |
| suggest_estimated_price | Proposer un prix estimé | float | calculé ajouté par Achats Inventaire ( |
| suggested_qty | Quantité suggérée | integer | calculé ajouté par Achats Inventaire ( |
| tax_string | String fiscal | char | calculé ajouté par Facturation ( |
| total_cost | Coût total Sum of Multiplication of Invoice price and quantity of Vendor Bills | float | calculé ajouté par Marges par produit ( |
| total_margin | Marge totale Chiffre d'affaires - Coût total | float | calculé ajouté par Marges par produit ( |
| total_margin_rate | Taux de marge totale (%) Marge totale * 100 / chiffre d'affaires | float | calculé ajouté par Marges par produit ( |
| total_value | Valeur totale | monetary | calculé ajouté par WMS Comptabilité ( |
| turnover | Chiffre d'affaires Somme de la multiplication du prix facturé par la quantité dans les factures clients | float | calculé ajouté par Marges par produit ( |
| used_in_bom_count | # Nomenclatures où utilisé | integer | calculé ajouté par Fabrication ( |
| valid_ean | Le code-barres est valide EAN | boolean | calculé ajouté par Inventaire ( |
| variant_bom_ids | Nomenclatures des variantes de produit | one2many→ mrp.bom | inverse : ajouté par Fabrication ( |
| variant_ribbon_id | Ruban de variante | many2one | ajouté par eCommerce ( |
| virtual_available | Quantité prévue Forecast quantity (computed as Quantity On Hand - Outgoing + Incoming - Quantity to Remove) In a context with a single Stock Location, this includes goods stored in this location, or any of its children. In a context with a single Warehouse, this includes goods stored in the Stock Location of this Warehouse, or any of its children. Otherwise, this includes goods stored in any Stock Location with 'internal' type. | float | calculé ajouté par Inventaire ( |
| volume | Volume | float | |
| website_id | Site Web | many2one | related : ajouté par eCommerce ( |
| website_url | URL de site web L'URL complète pour accéder au document à travers le site web. | char | calculé ajouté par eCommerce ( |
| weight | Poids | float | |
| write_date | Date de rédaction | datetime | calculé, stocké |
| activity_calendar_event_id | Activité suivante de l'événement du calendrier | many2one | calculé hérité de mail.activity.mixin |
| activity_date_deadline | Date limite de l'activité à venir | date | lecture seulecalculé hérité de mail.activity.mixin |
| activity_exception_decoration | Indicateur d’exception d’activité Type d'activité d'exception enregistrée. | selection | calculé Valeurs : hérité de mail.activity.mixin |
| activity_exception_icon | Icône Icône pour indiquer une activité d'exception. | char | calculé hérité de mail.activity.mixin |
| activity_ids | Activités | one2many | inverse : hérité de mail.activity.mixin |
| activity_state | Statut de l'activité Status based on activities Overdue: Due date is already passed Today: Activity date is today Planned: Future activities. | selection | calculé Valeurs : hérité de mail.activity.mixin |
| activity_summary | Résumé de l'activité suivante | char | related : hérité de mail.activity.mixin |
| activity_type_icon | Icône de type d'activité | char | related : hérité de mail.activity.mixin |
| activity_type_id | Type d'activités à venir | many2one | related : hérité de mail.activity.mixin |
| activity_user_id | Utilisateur responsable | many2one | lecture seulecalculé hérité de mail.activity.mixin |
| has_message | A un message | boolean | calculé hérité de mail.thread |
| message_attachment_count | Nombre de pièces jointes | integer | calculé hérité de mail.thread |
| message_follower_ids | Abonnés | one2many | inverse : hérité de mail.thread |
| message_has_error | Erreur d'envoi du message Si coché, certains messages ont une erreur de livraison. | boolean | calculé hérité de mail.thread |
| message_has_error_counter | Nombre d'erreurs Nombre de messages avec des erreurs d'envoi | integer | calculé hérité de mail.thread |
| message_has_sms_error | Erreur d'envoi SMS Si coché, certains messages ont une erreur de livraison. | boolean | calculé hérité de mail.thread |
| message_ids | Messages | one2many | inverse : hérité de mail.thread |
| message_is_follower | Est un abonné | boolean | calculé hérité de mail.thread |
| message_needaction | Nécessite une action Si coché, de nouveaux messages demandent votre attention. | boolean | calculé hérité de mail.thread |
| message_needaction_counter | Nombre d'actions Nombre de messages nécessitant une action | integer | calculé hérité de mail.thread |
| message_partner_ids | Abonnés (Partenaires) | many2many | calculé hérité de mail.thread |
| my_activity_date_deadline | Échéance de mon activité | date | lecture seulecalculé hérité de mail.activity.mixin |
| rating_ids | Évaluations | one2many | inverse : hérité de mail.thread |
| website_message_ids | Messages du site web Historique de communication du site web | one2many | inverse : hérité de mail.thread |
| create_date | Créé le | datetime | lecture seuleautomatique |
| create_uid | Créé par | many2one | lecture seuleautomatique |
| display_name | Nom affiché | char | lecture seulecalculéautomatique |
| id | ID | integer | lecture seuleautomatique |
| write_uid | Dernière mise à jour par | many2one | lecture seuleautomatique |
Relations
Modèles liés depuis ce modèle
- event.event.ticket : event_ticket_ids
- mrp.bom : variant_bom_ids
- mrp.bom.line : bom_line_ids
- product.document : product_document_ids
- product.image : product_variant_image_ids
- product.pricelist.item : pricelist_rule_ids
- product.ribbon : variant_ribbon_id
- product.tag : additional_product_tag_ids, all_product_tag_ids
- product.template : product_tmpl_id
- product.template.attribute.value : product_template_attribute_value_ids, product_template_variant_value_ids
- product.uom : product_uom_ids
- purchase.order.line : purchase_order_line_ids
- res.currency : company_currency_id
- res.partner : stock_notification_partner_ids
- slide.channel : channel_ids
- stock.move : stock_move_ids
- stock.putaway.rule : putaway_rule_ids
- stock.quant : stock_quant_ids
- stock.storage.category.capacity : storage_category_capacity_ids
- stock.warehouse.orderpoint : orderpoint_ids
- website.base.unit : base_unit_id
Champs d'autres modèles qui pointent ici
- account.analytic.distribution.model : product_id
- account.analytic.line : product_id
- account.invoice.report : product_id
- account.move.line : product_id
- delivery.carrier : product_id
- event.booth.category : product_id
- event.booth.configurator : product_id
- event.event.configurator : product_id
- event.sale.report : product_id
- event.type.booth : product_id
- event.type.ticket : product_id
- hr.expense : product_id
- hr.expense.split : product_id
- loyalty.program : payment_program_discount_product_id, trigger_product_ids
- loyalty.reward : all_discount_product_ids, discount_line_product_id, discount_product_ids, reward_product_id, reward_product_ids
- loyalty.rule : product_ids, valid_product_ids
- mrp.bom : product_id
- mrp.bom.byproduct : product_id
- mrp.bom.line : product_id
- mrp.consumption.warning.line : product_id
- mrp.production : bom_product_ids, product_id
- mrp.production.split : product_id
- mrp.unbuild : product_id
- mrp.workcenter.capacity : product_id
- mrp.workorder : product_id
- pos.config : discount_product_id, down_payment_product_id, tip_product_id
- pos.order.line : product_id
- pos.pack.operation.lot : product_id
- product.combo.item : product_id
- product.image : product_variant_id
- product.label.layout : product_ids
- product.pricelist.item : product_id
- product.replenish : product_id
- product.supplierinfo : product_id
- product.tag : product_ids, product_product_ids
- product.template : accessory_product_ids, product_variant_id
- product.template.attribute.value : ptav_product_variant_ids
- product.uom : product_id
- product.value : product_id
- product.wishlist : product_id
- et 38 autres
Lire ce modèle par l'API
Exemple d'appel à l'API JSON-2 d'Odoo 19 : lecture des cinq premiers enregistrements avec des champs réels du modèle. Remplacez l'instance, la base et la clé API par les vôtres.
curl -X POST "https://votre-instance.odoo.com/json/2/product.product/search_read" \
-H "Authorization: bearer $ODOO_API_KEY" \
-H "X-Odoo-Database: votre-base" \
-H "Content-Type: application/json" \
-d '{"domain":[],"fields":["base_unit_count","product_tmpl_id","base_unit_id","variant_ribbon_id","website_id"],"limit":5}'import requests
BASE_URL = "https://votre-instance.odoo.com/json/2"
headers = {"Authorization": f"bearer {API_KEY}", "X-Odoo-Database": "votre-base"}
res = requests.post(
f"{BASE_URL}/product.product/search_read",
headers=headers,
json={"domain": [], "fields": ["base_unit_count","product_tmpl_id","base_unit_id","variant_ribbon_id","website_id"], "limit": 5},
)
res.raise_for_status()
print(res.json())- L'accès à l'API externe est réservé à la formule Custom d'Odoo.
- XML-RPC et JSON-RPC seront retirés dans Odoo 22 (automne 2028) : préférez JSON-2.
- Les droits d'accès et règles d'enregistrement de l'utilisateur de la clé s'appliquent.
Citer cet outil
Vous rédigez un tutoriel, une documentation interne ou une réponse sur un forum ? Copiez ce lien pour renvoyer vos lecteurs vers la fiche à jour.
<a href="https://aidoo.ai/fr/outils/explorateur-modeles-odoo/product-product">product.product (Odoo 19.0)</a>Sources
- Code source du modèle sur GitHub
- Documentation Odoo 19 : ORM API
- Documentation Odoo 19 : API externe JSON-2
Données vérifiées le 23 septembre 2026 · Odoo 19.0 Community
Vous avez un projet Odoo ou souhaitez exploiter votre ERP avec l'IA ? Échangeons
Intégration, développement de modules, connexion de Claude ou ChatGPT à vos données : décrivez-nous votre contexte, nous vous répondons sous 24 heures ouvrées.