Odoo 19.0 Community · Persistant

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 techniqueLibelléTypeDétails
activeActif

Décocher cette case vous permet de masquer le produit sans le supprimer.

boolean
additional_product_tag_idsÉtiquettes variantesmany2many
all_product_tag_idsToutes les étiquettes de produitmany2many
calculé
avg_costCoût moyenmonetary
calculé

ajouté par WMS Comptabilité (stock_account)

barcodeCode-barres

Numéro d'article international (IAN) utilisé pour identifier cet article.

char
base_unit_countNombre 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 (website_sale)

base_unit_idUnité de mesure personnalisée

Définissez une unité personnalisée à afficher dans le champ Prix par unité de mesure.

many2one

ajouté par eCommerce (website_sale)

base_unit_nameNom 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 (website_sale)

base_unit_pricePrix unitairemonetary
calculé

ajouté par eCommerce (website_sale)

bom_count# Nomenclaturesinteger
calculé

ajouté par Fabrication (mrp)

bom_line_idsComposants de nomenclatureone2many

inverse : product_id

ajouté par Fabrication (mrp)

can_image_1024_be_zoomedL'Image 1024 peut être agrandieboolean
calculé
can_image_variant_1024_be_zoomedPeut-on agrandir l'image 1024boolean
calculé, stocké
channel_idsCoursone2many

inverse : product_id

ajouté par Vendre des cours (website_sale_slides)

codeRéférencechar
calculé
combination_indicesIndices combinéschar
calculé, stocké
company_currency_idDevise 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é (stock_account)

date_fromMarge depuisdate
calculé

ajouté par Marges par produit (product_margin)

date_toMarge jusqu'àdate
calculé

ajouté par Marges par produit (product_margin)

default_codeRéférence internechar
event_ticket_idsTickets d'événementone2many

inverse : product_id

ajouté par Produit événements (event_product)

expected_marginMarge attendue

Vente attendue - Coût normal

float
calculé

ajouté par Marges par produit (product_margin)

expected_margin_rateMarge attendue (%)

Marge attendue * 100 / Vente attendue

float
calculé

ajouté par Marges par produit (product_margin)

free_qtyQuantité 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 (stock)

gelato_product_uidUid du produit Gelatochar
lecture seule

ajouté par Gelato (sale_gelato)

image_1024Image 1024image
calculé
image_128Image 128image
calculé
image_1920Imageimage
calculé
image_256Image 256image
calculé
image_512Image 512image
calculé
image_variant_1024Image de variante 1024image

related : image_variant_1920

image_variant_128Image de variante 128image

related : image_variant_1920

image_variant_1920Image de la varianteimage
image_variant_256Image de variante 256image

related : image_variant_1920

image_variant_512Image de variante 512image

related : image_variant_1920

import_attribute_valuesValeurs du produitchar
calculé
incoming_qtyEntrant

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 (stock)

invoice_stateStatut de la factureselection
lecture seulecalculé

Valeurs : paid (Payé), open_paid (Ouvert et Payé), draft_open_paid (Brouillon, Ouvert et Payé)

ajouté par Marges par produit (product_margin)

is_favoriteEst favoriboolean

related : product_tmpl_id.is_favorite

is_in_purchase_orderBon de commande fournisseurboolean
calculé

ajouté par Achats (purchase)

is_in_selected_section_of_orderEst dans la section sélectionnée de la commandeboolean
is_kitsEst un kitboolean
calculé

ajouté par Fabrication (mrp)

is_product_variantEst une variante de produitboolean
calculé
lot_properties_definitionPropriétés du lotproperties_definition

ajouté par Inventaire (stock)

lst_pricePrix 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_demandDemande mensuellefloat
calculé

ajouté par Achats Inventaire (purchase_stock)

mrp_product_qtyFabriquéfloat
calculé

ajouté par Fabrication (mrp)

nbr_moves_inNbre d'entrées

Nombre de mouvements entrants au cours des 12 derniers mois

integer
calculé

ajouté par Inventaire (stock)

nbr_moves_outNbre de sorties

Nombre de mouvements sortants au cours des 12 derniers mois

integer
calculé

ajouté par Inventaire (stock)

nbr_reordering_rulesRègles de réapprovisionnementinteger
calculé

ajouté par Inventaire (stock)

normal_costCoût normal

Somme de la multiplication du prix de revient par la quantité dans les factures fournisseurs

float
calculé

ajouté par Marges par produit (product_margin)

orderpoint_idsRègles de stock minimumone2many

inverse : product_id

ajouté par Inventaire (stock)

outgoing_qtySortant

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 (stock)

partner_refRéf. clientchar
calculé
price_extraPrix supplémentaires des variantes

Il s'agit de la somme des suppléments de prix de tous les attributs.

float
calculé
pricelist_rule_idsRègles de liste de prixone2many
calculé

inverse : product_id

product_catalog_product_is_in_bomProduit du catalogue produit se trouve dans la nomenclatureboolean
calculé

ajouté par Fabrication (mrp)

product_catalog_product_is_in_moProduit du catalogue produit se trouve dans l'ordre de fabricationboolean
calculé

ajouté par Fabrication (mrp)

product_catalog_product_is_in_repairProduit du catalogue produit en cours de réparationboolean
calculé

ajouté par Réparations (repair)

product_catalog_product_is_in_sale_orderProduit du catalogue produit se trouve dans la commande clientboolean
calculé

ajouté par Ventes (sale)

product_document_countNombre de documentsinteger
calculé
product_document_idsDocumentsone2many

inverse : res_id

product_template_attribute_value_idsValeurs d'attributmany2many
product_template_variant_value_idsValeurs de la variantemany2many
product_tmpl_idModèle de produitmany2one
requis
product_uom_idsCode-barres de l'unitéone2many

inverse : product_id

product_variant_image_idsImages supplémentaires pour la varianteone2many

inverse : product_variant_id

ajouté par eCommerce (website_sale)

purchase_avg_pricePrix d'achat unitaire moyen

Prix moyen dans les factures fournisseurs

float
calculé

ajouté par Marges par produit (product_margin)

purchase_gapÉcart des achats

Coût normal - Coût total

float
calculé

ajouté par Marges par produit (product_margin)

purchase_num_invoiced# facturé à l'achat

Somme de la quantité dans les factures fournisseurs

float
calculé

ajouté par Marges par produit (product_margin)

purchase_order_line_idsLignes de bon de commandeone2many

inverse : product_id

ajouté par Achats Inventaire (purchase_stock)

purchased_product_qtyAchetéfloat
calculé

ajouté par Achats (purchase)

putaway_rule_idsStratégies de rangementone2many

inverse : product_id

ajouté par Inventaire (stock)

qty_availableQuantité 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 (stock)

reordering_max_qtyQté de réapprovisionnement max.float
calculé

ajouté par Inventaire (stock)

reordering_min_qtyQté de réapprovisionnement min.float
calculé

ajouté par Inventaire (stock)

sale_avg_pricePrix de vente unitaire moyen

Prix moyen dans les factures clients.

float
calculé

ajouté par Marges par produit (product_margin)

sale_expectedVente attendue

Somme de la multiplication du prix catalogue de vente par la quantité dans les factures clients

float
calculé

ajouté par Marges par produit (product_margin)

sale_num_invoiced# facturé à la vente

Somme de la quantité dans les factures clients

float
calculé

ajouté par Marges par produit (product_margin)

sales_countVendufloat
calculé

ajouté par Ventes (sale)

sales_gapÉcart des ventes

Vente attendue - Chiffre d'affaires

float
calculé

ajouté par Marges par produit (product_margin)

show_forecasted_qty_status_buttonBouton d'Affichage de la Qté prévueboolean
calculé

ajouté par Inventaire (stock)

show_on_hand_qty_status_buttonMontrer le Bouton de Statut Qté disponibleboolean
calculé

ajouté par Inventaire (stock)

show_qty_update_buttonAfficher le bouton de mise à jour des quantitésboolean
calculé

ajouté par Inventaire (stock)

standard_priceCoû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_warningAvertissement pour la mise à jour du prix standardchar
calculé

ajouté par Dépenses (hr_expense)

stock_move_idsMouvement de stockone2many

inverse : product_id

ajouté par Inventaire (stock)

stock_notification_partner_idsNotifications de retour en stockmany2many

ajouté par Disponibilité des produits (website_sale_stock)

stock_quant_idsQuant de stockone2many

inverse : product_id

ajouté par Inventaire (stock)

storage_category_capacity_idsCapacité de la catégorie d'emplacementone2many

inverse : product_id

ajouté par Inventaire (stock)

suggest_estimated_priceProposer un prix estiméfloat
calculé

ajouté par Achats Inventaire (purchase_stock)

suggested_qtyQuantité suggéréeinteger
calculé

ajouté par Achats Inventaire (purchase_stock)

tax_stringString fiscalchar
calculé

ajouté par Facturation (account)

total_costCoût total

Sum of Multiplication of Invoice price and quantity of Vendor Bills

float
calculé

ajouté par Marges par produit (product_margin)

total_marginMarge totale

Chiffre d'affaires - Coût total

float
calculé

ajouté par Marges par produit (product_margin)

total_margin_rateTaux de marge totale (%)

Marge totale * 100 / chiffre d'affaires

float
calculé

ajouté par Marges par produit (product_margin)

total_valueValeur totalemonetary
calculé

ajouté par WMS Comptabilité (stock_account)

turnoverChiffre d'affaires

Somme de la multiplication du prix facturé par la quantité dans les factures clients

float
calculé

ajouté par Marges par produit (product_margin)

used_in_bom_count# Nomenclatures où utiliséinteger
calculé

ajouté par Fabrication (mrp)

valid_eanLe code-barres est valide EANboolean
calculé

ajouté par Inventaire (stock)

variant_bom_idsNomenclatures des variantes de produitone2many

inverse : product_id

ajouté par Fabrication (mrp)

variant_ribbon_idRuban de variantemany2one

ajouté par eCommerce (website_sale)

virtual_availableQuantité 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 (stock)

volumeVolumefloat
website_idSite Webmany2one

related : product_tmpl_id.website_id

ajouté par eCommerce (website_sale)

website_urlURL de site web

L'URL complète pour accéder au document à travers le site web.

char
calculé

ajouté par eCommerce (website_sale)

weightPoidsfloat
write_dateDate de rédactiondatetime
calculé, stocké
activity_calendar_event_idActivité suivante de l'événement du calendriermany2one
calculé

hérité de mail.activity.mixin

activity_date_deadlineDate limite de l'activité à venirdate
lecture seulecalculé

hérité de mail.activity.mixin

activity_exception_decorationIndicateur d’exception d’activité

Type d'activité d'exception enregistrée.

selection
calculé

Valeurs : warning (Alerte), danger (Erreur)

hérité de mail.activity.mixin

activity_exception_iconIcône

Icône pour indiquer une activité d'exception.

char
calculé

hérité de mail.activity.mixin

activity_idsActivitésone2many

inverse : res_id

hérité de mail.activity.mixin

activity_stateStatut de l'activité

Status based on activities Overdue: Due date is already passed Today: Activity date is today Planned: Future activities.

selection
calculé

Valeurs : overdue (En retard), today (Aujourd'hui), planned (Planifié)

hérité de mail.activity.mixin

activity_summaryRésumé de l'activité suivantechar

related : activity_ids.summary

hérité de mail.activity.mixin

activity_type_iconIcône de type d'activitéchar

related : activity_ids.icon

hérité de mail.activity.mixin

activity_type_idType d'activités à venirmany2one

related : activity_ids.activity_type_id

hérité de mail.activity.mixin

activity_user_idUtilisateur responsablemany2one
lecture seulecalculé

hérité de mail.activity.mixin

has_messageA un messageboolean
calculé

hérité de mail.thread

message_attachment_countNombre de pièces jointesinteger
calculé

hérité de mail.thread

message_follower_idsAbonnésone2many

inverse : res_id

hérité de mail.thread

message_has_errorErreur d'envoi du message

Si coché, certains messages ont une erreur de livraison.

boolean
calculé

hérité de mail.thread

message_has_error_counterNombre d'erreurs

Nombre de messages avec des erreurs d'envoi

integer
calculé

hérité de mail.thread

message_has_sms_errorErreur d'envoi SMS

Si coché, certains messages ont une erreur de livraison.

boolean
calculé

hérité de mail.thread

message_idsMessagesone2many

inverse : res_id

hérité de mail.thread

message_is_followerEst un abonnéboolean
calculé

hérité de mail.thread

message_needactionNécessite une action

Si coché, de nouveaux messages demandent votre attention.

boolean
calculé

hérité de mail.thread

message_needaction_counterNombre d'actions

Nombre de messages nécessitant une action

integer
calculé

hérité de mail.thread

message_partner_idsAbonné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Évaluationsone2many

inverse : res_id

hérité de mail.thread

website_message_idsMessages du site web

Historique de communication du site web

one2many

inverse : res_id

hérité de mail.thread

create_dateCréé ledatetime
lecture seuleautomatique
create_uidCréé parmany2one
lecture seuleautomatique
display_nameNom affichéchar
lecture seulecalculéautomatique
idIDinteger
lecture seuleautomatique
write_uidDernière mise à jour parmany2one
lecture seuleautomatique

Relations

Modèles liés depuis ce modèle

Champs d'autres modèles qui pointent ici

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
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}'
Python (requests)
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

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.