Odoo 19.0 Community · Persistent

product.product: fields, relations and API

The product.product model ("Product Variant") is a persistent model declared by the Products & Pricelists module, then extended by 35 other modules. It exposes 137 fields, 108 of them declared directly on the model; 93 fields from other models point to it. Below you will find every field with its technical name, type, label and relations, followed by an Odoo 19 JSON-2 API call.

Model identity

Technical name
product.product
Label
Product Variant
Type
Persistent (models.Model)
SQL table
product_product
Origin module
Products & Pricelists (product)
Extended by
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
Default order (_order)
default_code, name, id
Inherits from (mixins)
mail.threadmail.activity.mixinpos.load.mixin
Delegation (_inherits)
product.template: fields of this model are also available, through product_tmpl_id

Model fields

108 own fields, 24 inherited from mixins and 5 automatic ORM fields. Click a name to get a direct link to that field.

137 of 137 fields shown

Technical nameLabelTypeDetails
activeActive

If unchecked, it will allow you to hide the product without removing it.

boolean
additional_product_tag_idsVariant Tagsmany2many
all_product_tag_idsAll Product Tagmany2many
computed
avg_costAverage Costmonetary
computed

added by WMS Accounting (stock_account)

barcodeBarcode

International Article Number used for product identification.

char
base_unit_countBase Unit Count

Display base unit price on your eCommerce pages. Set to 0 to hide it for this product.

float
required

added by eCommerce (website_sale)

base_unit_idCustom Unit of Measure

Define a custom unit to display in the price per unit of measure field.

many2one

added by eCommerce (website_sale)

base_unit_nameBase Unit Name

Displays the custom unit for the products if defined or the selected unit of measure otherwise.

char
computed

added by eCommerce (website_sale)

base_unit_pricePrice Per Unitmonetary
computed

added by eCommerce (website_sale)

bom_count# Bill of Materialinteger
computed

added by Manufacturing (mrp)

bom_line_idsBoM Componentsone2many

inverse: product_id

added by Manufacturing (mrp)

can_image_1024_be_zoomedCan Image 1024 be zoomedboolean
computed
can_image_variant_1024_be_zoomedCan Variant Image 1024 be zoomedboolean
computed, stored
channel_idsCoursesone2many

inverse: product_id

added by Sell Courses (website_sale_slides)

codeReferencechar
computed
combination_indicesCombination Indiceschar
computed, stored
company_currency_idValuation Currency

Technical field to correctly show the currently selected company's currency that corresponds to the totaled value of the product's valuation layers

many2one
computed

added by WMS Accounting (stock_account)

date_fromMargin Date Fromdate
computed

added by Margins by Products (product_margin)

date_toMargin Date Todate
computed

added by Margins by Products (product_margin)

default_codeInternal Referencechar
event_ticket_idsEvent Ticketsone2many

inverse: product_id

added by Events Product (event_product)

expected_marginExpected Margin

Expected Sale - Normal Cost

float
computed

added by Margins by Products (product_margin)

expected_margin_rateExpected Margin (%)

Expected margin * 100 / Expected Sale

float
computed

added by Margins by Products (product_margin)

free_qtyFree To Use Quantity

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
computed

added by Inventory (stock)

gelato_product_uidGelato Product Uidchar
read-only

added by Gelato (sale_gelato)

image_1024Image 1024image
computed
image_128Image 128image
computed
image_1920Imageimage
computed
image_256Image 256image
computed
image_512Image 512image
computed
image_variant_1024Variant Image 1024image

related: image_variant_1920

image_variant_128Variant Image 128image

related: image_variant_1920

image_variant_1920Variant Imageimage
image_variant_256Variant Image 256image

related: image_variant_1920

image_variant_512Variant Image 512image

related: image_variant_1920

import_attribute_valuesProduct Valueschar
computed
incoming_qtyIncoming

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
computed

added by Inventory (stock)

invoice_stateInvoice Stateselection
read-onlycomputed

Values: paid (Paid), open_paid (Open and Paid), draft_open_paid (Draft, Open and Paid)

added by Margins by Products (product_margin)

is_favoriteIs Favoriteboolean

related: product_tmpl_id.is_favorite

is_in_purchase_orderIs In Purchase Orderboolean
computed

added by Purchase (purchase)

is_in_selected_section_of_orderIs In Selected Section Of Orderboolean
is_kitsIs Kitsboolean
computed

added by Manufacturing (mrp)

is_product_variantIs Product Variantboolean
computed
lot_properties_definitionLot Propertiesproperties_definition

added by Inventory (stock)

lst_priceSales Price

The sale price is managed from the product template. Click on the 'Configure Variants' button to set the extra attribute prices.

float
computed
monthly_demandMonthly Demandfloat
computed

added by Purchase Stock (purchase_stock)

mrp_product_qtyManufacturedfloat
computed

added by Manufacturing (mrp)

nbr_moves_inNbr Moves In

Number of incoming stock moves in the past 12 months

integer
computed

added by Inventory (stock)

nbr_moves_outNbr Moves Out

Number of outgoing stock moves in the past 12 months

integer
computed

added by Inventory (stock)

nbr_reordering_rulesReordering Rulesinteger
computed

added by Inventory (stock)

normal_costNormal Cost

Sum of Multiplication of Cost price and quantity of Vendor Bills

float
computed

added by Margins by Products (product_margin)

orderpoint_idsMinimum Stock Rulesone2many

inverse: product_id

added by Inventory (stock)

outgoing_qtyOutgoing

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
computed

added by Inventory (stock)

partner_refCustomer Refchar
computed
price_extraVariant Price Extra

This is the sum of the extra price of all attributes

float
computed
pricelist_rule_idsPricelist Rulesone2many
computed

inverse: product_id

product_catalog_product_is_in_bomProduct Catalog Product Is In Bomboolean
computed

added by Manufacturing (mrp)

product_catalog_product_is_in_moProduct Catalog Product Is In Moboolean
computed

added by Manufacturing (mrp)

product_catalog_product_is_in_repairProduct Catalog Product Is In Repairboolean
computed

added by Repairs (repair)

product_catalog_product_is_in_sale_orderProduct Catalog Product Is In Sale Orderboolean
computed

added by Sales (sale)

product_document_countDocuments Countinteger
computed
product_document_idsDocumentsone2many

inverse: res_id

product_template_attribute_value_idsAttribute Valuesmany2many
product_template_variant_value_idsVariant Valuesmany2many
product_tmpl_idProduct Templatemany2one
required
product_uom_idsUnit Barcodeone2many

inverse: product_id

product_variant_image_idsExtra Variant Imagesone2many

inverse: product_variant_id

added by eCommerce (website_sale)

purchase_avg_priceAvg. Purchase Unit Price

Avg. Price in Vendor Bills

float
computed

added by Margins by Products (product_margin)

purchase_gapPurchase Gap

Normal Cost - Total Cost

float
computed

added by Margins by Products (product_margin)

purchase_num_invoiced# Invoiced in Purchase

Sum of Quantity in Vendor Bills

float
computed

added by Margins by Products (product_margin)

purchase_order_line_idsPO Linesone2many

inverse: product_id

added by Purchase Stock (purchase_stock)

purchased_product_qtyPurchasedfloat
computed

added by Purchase (purchase)

putaway_rule_idsPutaway Rulesone2many

inverse: product_id

added by Inventory (stock)

qty_availableQuantity On Hand

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
computed

added by Inventory (stock)

reordering_max_qtyReordering Max Qtyfloat
computed

added by Inventory (stock)

reordering_min_qtyReordering Min Qtyfloat
computed

added by Inventory (stock)

sale_avg_priceAvg. Sale Unit Price

Avg. Price in Customer Invoices.

float
computed

added by Margins by Products (product_margin)

sale_expectedExpected Sale

Sum of Multiplication of Sale Catalog price and quantity of Customer Invoices

float
computed

added by Margins by Products (product_margin)

sale_num_invoiced# Invoiced in Sale

Sum of Quantity in Customer Invoices

float
computed

added by Margins by Products (product_margin)

sales_countSoldfloat
computed

added by Sales (sale)

sales_gapSales Gap

Expected Sale - Turn Over

float
computed

added by Margins by Products (product_margin)

show_forecasted_qty_status_buttonShow Forecasted Qty Status Buttonboolean
computed

added by Inventory (stock)

show_on_hand_qty_status_buttonShow On Hand Qty Status Buttonboolean
computed

added by Inventory (stock)

show_qty_update_buttonShow Qty Update Buttonboolean
computed

added by Inventory (stock)

standard_priceCost

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
company-dependent
standard_price_update_warningStandard Price Update Warningchar
computed

added by Expenses (hr_expense)

stock_move_idsStock Moveone2many

inverse: product_id

added by Inventory (stock)

stock_notification_partner_idsBack in stock Notificationsmany2many

added by Product Availability (website_sale_stock)

stock_quant_idsStock Quantone2many

inverse: product_id

added by Inventory (stock)

storage_category_capacity_idsStorage Category Capacityone2many

inverse: product_id

added by Inventory (stock)

suggest_estimated_priceSuggest Estimated Pricefloat
computed

added by Purchase Stock (purchase_stock)

suggested_qtySuggested Qtyinteger
computed

added by Purchase Stock (purchase_stock)

tax_stringTax Stringchar
computed

added by Invoicing (account)

total_costTotal Cost

Sum of Multiplication of Invoice price and quantity of Vendor Bills

float
computed

added by Margins by Products (product_margin)

total_marginTotal Margin

Turnover - Total cost

float
computed

added by Margins by Products (product_margin)

total_margin_rateTotal Margin Rate(%)

Total margin * 100 / Turnover

float
computed

added by Margins by Products (product_margin)

total_valueTotal Valuemonetary
computed

added by WMS Accounting (stock_account)

turnoverTurnover

Sum of Multiplication of Invoice price and quantity of Customer Invoices

float
computed

added by Margins by Products (product_margin)

used_in_bom_count# BoM Where Usedinteger
computed

added by Manufacturing (mrp)

valid_eanBarcode is valid EANboolean
computed

added by Inventory (stock)

variant_bom_idsBOM Product Variantsone2many

inverse: product_id

added by Manufacturing (mrp)

variant_ribbon_idVariant Ribbonmany2one

added by eCommerce (website_sale)

virtual_availableForecasted Quantity

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
computed

added by Inventory (stock)

volumeVolumefloat
website_idWebsitemany2one

related: product_tmpl_id.website_id

added by eCommerce (website_sale)

website_urlWebsite URL

The full URL to access the document through the website.

char
computed

added by eCommerce (website_sale)

weightWeightfloat
write_dateWrite Datedatetime
computed, stored
activity_calendar_event_idNext Activity Calendar Eventmany2one
computed

inherited from mail.activity.mixin

activity_date_deadlineNext Activity Deadlinedate
read-onlycomputed

inherited from mail.activity.mixin

activity_exception_decorationActivity Exception Decoration

Type of the exception activity on record.

selection
computed

Values: warning (Alert), danger (Error)

inherited from mail.activity.mixin

activity_exception_iconIcon

Icon to indicate an exception activity.

char
computed

inherited from mail.activity.mixin

activity_idsActivitiesone2many

inverse: res_id

inherited from mail.activity.mixin

activity_stateActivity State

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

selection
computed

Values: overdue (Overdue), today (Today), planned (Planned)

inherited from mail.activity.mixin

activity_summaryNext Activity Summarychar

related: activity_ids.summary

inherited from mail.activity.mixin

activity_type_iconActivity Type Iconchar

related: activity_ids.icon

inherited from mail.activity.mixin

activity_type_idNext Activity Typemany2one

related: activity_ids.activity_type_id

inherited from mail.activity.mixin

activity_user_idResponsible Usermany2one
read-onlycomputed

inherited from mail.activity.mixin

has_messageHas Messageboolean
computed

inherited from mail.thread

message_attachment_countAttachment Countinteger
computed

inherited from mail.thread

message_follower_idsFollowersone2many

inverse: res_id

inherited from mail.thread

message_has_errorMessage Delivery error

If checked, some messages have a delivery error.

boolean
computed

inherited from mail.thread

message_has_error_counterNumber of errors

Number of messages with delivery error

integer
computed

inherited from mail.thread

message_has_sms_errorSMS Delivery error

If checked, some messages have a delivery error.

boolean
computed

inherited from mail.thread

message_idsMessagesone2many

inverse: res_id

inherited from mail.thread

message_is_followerIs Followerboolean
computed

inherited from mail.thread

message_needactionAction Needed

If checked, new messages require your attention.

boolean
computed

inherited from mail.thread

message_needaction_counterNumber of Actions

Number of messages requiring action

integer
computed

inherited from mail.thread

message_partner_idsFollowers (Partners)many2many
computed

inherited from mail.thread

my_activity_date_deadlineMy Activity Deadlinedate
read-onlycomputed

inherited from mail.activity.mixin

rating_idsRatingsone2many

inverse: res_id

inherited from mail.thread

website_message_idsWebsite Messages

Website communication history

one2many

inverse: res_id

inherited from mail.thread

create_dateCreated ondatetime
read-onlyautomatic
create_uidCreated bymany2one
read-onlyautomatic
display_nameDisplay Namechar
read-onlycomputedautomatic
idIDinteger
read-onlyautomatic
write_uidLast Updated bymany2one
read-onlyautomatic

Relations

Models linked from this model

Fields of other models pointing here

Reading this model through the API

Odoo 19 JSON-2 API call reading the first five records with real fields of the model. Replace the instance, database and API key with your own.

curl
curl -X POST "https://your-instance.odoo.com/json/2/product.product/search_read" \
  -H "Authorization: bearer $ODOO_API_KEY" \
  -H "X-Odoo-Database: your-db" \
  -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://your-instance.odoo.com/json/2"
headers = {"Authorization": f"bearer {API_KEY}", "X-Odoo-Database": "your-db"}

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())
  • External API access requires Odoo's Custom plan.
  • XML-RPC and JSON-RPC will be removed in Odoo 22 (fall 2028): use JSON-2.
  • The access rights and record rules of the key's user apply.

Cite this tool

Writing a tutorial, internal documentation or a forum answer? Copy this link to send your readers to the up-to-date reference.

<a href="https://aidoo.ai/en/outils/explorateur-modeles-odoo/product-product">product.product (Odoo 19.0)</a>

Sources

Data verified on September 23, 2026 · Odoo 19.0 Community

Have an Odoo project, or want to put your ERP to work with AI? Let's talk

Implementation, custom module development, connecting Claude or ChatGPT to your data: tell us about your context and we will reply within 24 business hours.