Odoo 20.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 Products & Pricelists, puis enrichi par 34 autres modules. Il expose 139 champs, dont 110 déclarés directement sur le modèle ; 107 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 20.

Fiche d'identité

Nom technique
product.product
Libellé
Variante de produit
Type
Persistant (models.Model)
Table SQL
product_product
Module d'origine
Products & Pricelists (product)
Étendu par
account, sale, sale_project, event_product, event_booth_sale, hr_expense, point_of_sale, loyalty, stock, mrp, stock_account, mrp_account, stock_delivery, 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, purchase_requisition, sale_edi_ubl, sale_gelato, sale_timesheet, website_sale, website_sale_slides, website_event_sale, website_sale_stock, website_sale_loyalty
Tri par défaut (_order)
default_code, name, id
Hérite de (mixins)
mail.threadmail.activity.mixinpos.load.mixinwebsite.structured_data.mixinwebsite.trackable.mixin
Délégation (_inherits)
product.template : les champs de ce modèle sont aussi accessibles, via product_tmpl_id

Champs du modèle

110 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.

139 champs affichés sur 139

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 Accounting (stock_account)

barcodeCode-barres

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

char
base_unit_countUnité de référence

Afficher le prix unitaire de base. Définissez la valeur sur 0 pour le masquer pour ce produit.

float
requis
base_unit_idUnité de mesure personnalisée

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

many2one
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é
base_unit_pricePrix unitairemonetary
calculé
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é
catalog_is_in_orderCatalog Is In Orderboolean
catalog_is_in_selected_sectionCatalog Is In Selected Sectionboolean

ajouté par Facturation (account)

channel_idsCoursone2many

inverse : product_id

ajouté par Sell Courses (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 Accounting (stock_account)

country_of_originOrigine des marchandises

Rules of origin determine where goods originate, i.e. not where they have been shipped from, but where they have been produced or manufactured. As such, the ‘origin’ is the 'economic nationality' of goods traded in commerce.

many2one

ajouté par Delivery - Stock (stock_delivery)

date_fromMarge depuisdate
calculé

ajouté par Margins by Products (product_margin)

date_toMarge jusqu'àdate
calculé

ajouté par Margins by Products (product_margin)

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

inverse : product_id

ajouté par Events Product (event_product)

expected_marginMarge attendue

Vente attendue - Coût normal

float
calculé

ajouté par Margins by Products (product_margin)

expected_margin_rateMarge attendue (%)

Marge attendue * 100 / Vente attendue

float
calculé

ajouté par Margins by Products (product_margin)

expense_job_position_limit_idsJob Position Limitsone2many

inverse : product_id

ajouté par Dépenses (hr_expense)

extra_uom_idsEmballages supplémentaires

Emballages supplémentaires spécifiques à la variante pour ce produit pouvant être utilisés pour les ventes

many2many
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é
gelato_product_uidUid du produit Gelatochar
lecture seule

ajouté par Gelato (sale_gelato)

gelato_variant_image_idsImages d’impression des variantes Gelato

Afin de garantir un bon résultat d’impression, uploadez un PNG de l’ensemble de la zone d’impression avec vos éléments graphiques correctement positionnés.

one2many
lecture seule

inverse : res_id

ajouté par Gelato (sale_gelato)

hs_codeCode SH

Code normalisé pour l'expédition internationale et la déclaration de marchandises.

char

ajouté par Delivery - Stock (stock_delivery)

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é
invoice_stateStatut de la factureselection
lecture seulecalculé

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

ajouté par Margins by Products (product_margin)

is_favoriteEst favoriboolean

related : product_tmpl_id.is_favorite

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 peut être défini manuellement ou calculé à partir du modèle de produit. Cliquez sur le bouton "Configurer les variantes" pour définir les prix des attributs supplémentaires.

float
calculé, stocké
monthly_demandDemande mensuellefloat
calculé

ajouté par Purchase Stock (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 Margins by Products (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é
partner_refRéf. clientchar
calculé
previously_bought_by_customerPrécédemment acheté par le clientboolean

ajouté par Ventes (sale)

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_document_countNombre de documentsinteger
calculé
product_document_idsDocumentsone2many

inverse : res_id

product_template_attribute_value_idsValeurs d'attributmany2many
product_template_image_idsProduct Template Imageone2many

related : product_tmpl_id.product_template_image_ids

ajouté par eCommerce (website_sale)

product_template_variant_value_idsAttributsmany2many
product_tmpl_idModèle de produitmany2one
requis
product_uom_idsCode-barres de l'unitéone2many

inverse : product_id

purchase_avg_pricePrix d'achat unitaire moyen

Prix moyen dans les factures fournisseurs

float
calculé

ajouté par Margins by Products (product_margin)

purchase_gapÉcart des achats

Coût normal - Coût total

float
calculé

ajouté par Margins by Products (product_margin)

purchase_num_invoiced# facturé à l'achat

Somme de la quantité dans les factures fournisseurs

float
calculé

ajouté par Margins by Products (product_margin)

purchase_order_line_idsLignes de bon de commandeone2many

inverse : product_id

ajouté par Purchase Stock (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édépend de la société
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 Margins by Products (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 Margins by Products (product_margin)

sale_num_invoiced# facturé à la vente

Somme de la quantité dans les factures clients

float
calculé

ajouté par Margins by Products (product_margin)

sales_countVendufloat
calculé

ajouté par Ventes (sale)

sales_gapÉcart des ventes

Vente attendue - Chiffre d'affaires

float
calculé

ajouté par Margins by Products (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)

sold_by_vendor_idFournisseurmany2one

ajouté par Achats (purchase)

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é
stock_move_idsMouvement de stockone2many

inverse : product_id

ajouté par Inventaire (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 Purchase Stock (purchase_stock)

suggested_qtyQuantité suggéréeinteger
calculé

ajouté par Purchase Stock (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 Margins by Products (product_margin)

total_marginMarge totale

Chiffre d'affaires - Coût total

float
calculé

ajouté par Margins by Products (product_margin)

total_margin_rateTaux de marge totale (%)

Marge totale * 100 / chiffre d'affaires

float
calculé

ajouté par Margins by Products (product_margin)

total_valueValeur totalemonetary
calculé

ajouté par WMS Accounting (stock_account)

turnoverChiffre d'affaires

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

float
calculé

ajouté par Margins by Products (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_image_idsVariant Extra Imagesmany2many
calculé, stocké

ajouté par eCommerce (website_sale)

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é
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_plans_idsPlans d'activitémany2many
calculé

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

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 20 : 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","country_of_origin","sold_by_vendor_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","country_of_origin","sold_by_vendor_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 20.0)</a>

Sources

Données vérifiées le 25 septembre 2026 · Odoo 20.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.