Skip to Content
Odoo model

product.product

Product Variant. Defined in module product; exists in Odoo 16, 17, 18, 19, 20. Across the upgrade steps we tracked: 38 fields added, 20 removed, 2 renamed.

A specific variant of a product.template (e.g., T-Shirt in size Large and color Red). This is the actual item that is bought, sold, and tracked in inventory.

  1. Odoo 16 product
  2. Odoo 17 product
  3. Odoo 18 product
  4. Odoo 19 product
  5. Odoo 20 product

Odoo 16 to 17

Community only All changes in this step

Fields removed (3)

FieldTypeModuleNotes
attachment_countintegerwebsite_sale_digitalIts module (website_sale_digital) is not in Odoo 17: removed, renamed or merged into another module.
l10n_ke_hsn_codecharl10n_ke_edi_tremol
l10n_ke_hsn_namecharl10n_ke_edi_tremol

Fields added (5)

FieldTypeModule
lot_properties_definitionproperties_definitionstock
product_catalog_product_is_in_sale_orderbooleansale
product_document_countintegerproduct
product_document_idsone2manyproduct
ribbon_idmany2onewebsite_sale
2 views of this model removed
  • l10n_ke_edi_tremol.l10n_ke_inherit_product_product_form_view
  • website_sale_digital.product_product_view_form_inherit_digital

Odoo 17 to 18

Community only All changes in this step

Renamed (1)

Odoo 17Odoo 18Confidence
ribbon_idvariant_ribbon_id possible (same type, name extended)

Fields added (6)

FieldTypeModule
gelato_product_uidcharsale_gelato
is_in_purchase_orderbooleanpurchase
l10n_tr_ctsp_numbercharl10n_tr_nilvera_einvoice_extended
product_catalog_product_is_in_bombooleanmrp
product_catalog_product_is_in_mobooleanmrp
product_catalog_product_is_in_repairbooleanrepair

Now also inherits pos.load.mixin (fields from these parents are listed on their own pages).

1 views of this model removed
  • website_sale.product_product_view_form_add

Odoo 18 to 19

Community + Enterprise All changes in this step

Renamed (1)

Odoo 18Odoo 19Confidence
image_fetch_pendingis_image_fetch_pending possible (same type, name extended)

Fields removed (6)

FieldTypeModuleNotes
manufacturer_product_idchardelivery_fedex_certifiedIts module (delivery_fedex_certified) is not in Odoo 19: removed, renamed or merged into another module.
packaging_idsone2manyproduct
pricelist_item_countintegerproduct
quantity_svlfloatstock_account
stock_valuation_layer_idsone2manystock_account
value_svlfloatstock_account

Fields added (12)

FieldTypeModule
import_attribute_valuescharproduct
is_in_selected_section_of_orderbooleanproduct
l10n_in_hsn_missing_in_posbooleanl10n_in_pos
monthly_demandfloatpurchase_stock
pricelist_rule_idsone2manyproduct
product_uom_idsone2manyproduct
show_qty_update_buttonbooleanstock
stripe_issuing_activatedbooleanhr_expense_stripe
stripe_mcc_idsone2manyhr_expense_stripe
subscription_rule_idsone2manysale_subscription
suggest_estimated_pricefloatpurchase_stock
suggested_qtyintegerpurchase_stock
5 views of this model removed
  • account_intrastat_services.product_product_form_view_inherit_account_intrastat
  • delivery_fedex_certified.product_product_view_form_easy_inherit_delivery
  • mrp_account_enterprise.product_product_inherit_form_view_cost_structure
  • point_of_sale.product_product_view_form_normalized_pos
  • stock.product_product_view_form_easy_inherit_stock
3 actions on this model removed
  • mrp_account_enterprise.action_cost_struct_product_template
  • point_of_sale.product_product_action_add_pos
  • point_of_sale.product_product_action_edit_pos

Odoo 19 to 20

Community + Enterprise All changes in this step

Fields removed (11)

Fields added (15)

FieldTypeModule
avatax_parameter_value_idsone2manyaccount_avatax
catalog_is_in_orderbooleanproduct
catalog_is_in_selected_sectionbooleanaccount
expense_job_position_limit_idsone2manyhr_expense
extra_uom_idsmany2manyproduct
gelato_variant_image_idsone2manysale_gelato
is_tax_productbooleanpos_sale_planning
l10n_tr_customer_line_codecharl10n_tr_nilvera_einvoice
l10n_tr_seller_line_codecharl10n_tr_nilvera_einvoice
manufacturer_product_idchardelivery_fedex_certified
needs_pricer_updatebooleanpricer
previously_bought_by_customerbooleansale
pricer_tags_pricelist_idmany2onepricer
sold_by_vendor_idmany2onepurchase
variant_image_idsmany2manywebsite_sale

Now also inherits ai.preview.card.mixin, website.structured_data.mixin, website.trackable.mixin (fields from these parents are listed on their own pages).

21 views of this model removed
  • account.product_view_search_catalog
  • account_intrastat.account_intrastat_product_tree
  • account_intrastat.product_product_form_view_inherit_account_intrastat
  • industry_fsm_sale.industry_fsm_sale_product_catalog_inherit_search_view
  • industry_fsm_sale.industry_fsm_sale_product_catalog_kanban_view
  • industry_fsm_stock.industry_fsm_stock_product_catalog_kanban_view
  • l10n_ke_edi_oscu.product_product_form__view_inherit_l10n_ke_edi_oscu
  • l10n_ke_edi_oscu_stock.product_product_form__view_inherit_l10n_ke_edi_oscu
  • l10n_tr_nilvera_einvoice_extended.product_product_only_form_view_inherit_l10n_tr_nilvera_extended
  • mrp.mrp_product_product_search_view
  • mrp_account.product_variant_easy_edit_view_bom_inherit
  • mrp_plm.product_product_view_form_inherit_plm
  • point_of_sale.product_product_tree_view
  • pos_pricer.product_product_form_view_pricers
  • product.product_product_view_tree_tag
  • product.product_variant_easy_edit_view
  • sale_gelato.product_product_easy_form
  • sale_subscription.product_normal_form_view
  • stock_account.product_product_view_list_at_date
  • website_sale.product_product_normal_website_form_view
  • website_sale.product_product_view_form_easy_inherit_website_sale
8 actions on this model removed
  • approvals.product_product_action
  • mrp.mrp_product_variant_action
  • point_of_sale.product_product_action
  • product.product_normal_action
  • product.product_normal_action_sell
  • purchase.product_product_action
  • stock.label_product_product
  • stock.stock_product_normal_action
8 menus opening this model removed
  • approvals.approvals_menu_product_variant
  • mrp.product_variant_mrp
  • point_of_sale.pos_config_menu_action_product_product
  • purchase.product_product_menu
  • quality_control.quality_control_menu_product_variant
  • repair.repair_menu_product_product
  • sale.menu_products
  • stock.product_product_menu

All fields declared on product.product (174)

Fields this model declares itself in any version, with the versions they exist in. Inherited fields (mail.thread and other mixins) are on the parent model's page.

present not present not covered (Enterprise, Odoo 16 and 17)

Show all 174 fields
FieldTypeLabelModule1617181920
activebooleanActiveproduct
additional_product_tag_idsmany2many product.tagVariant Tagsproduct
all_product_tag_idsmany2many product.tagproduct
attachment_countintegerFilewebsite_sale_digital
avatax_category_idmany2one product.avatax.categoryaccount_avataxE
avatax_parameter_value_idsone2many avatax.parameter.valueaccount_avataxE
avg_costmonetaryAverage Coststock_account
barcodecharBarcodeproduct
base_unit_countfloatReference Unitproduct
base_unit_idmany2one product.base.unitCustom Unit of Measureproduct
base_unit_namecharproduct
base_unit_pricemonetaryPrice Per Unitproduct
bom_countinteger# Bill of Materialmrp
bom_line_idsone2many mrp.bom.lineBoM Componentsmrp
can_image_1024_be_zoomedbooleanCan Image 1024 be zoomedproduct
can_image_variant_1024_be_zoomedbooleanCan Variant Image 1024 be zoomedproduct
catalog_is_in_orderbooleanproduct
catalog_is_in_selected_sectionbooleanaccount
channel_idsone2many slide.channelCourseswebsite_sale_slides
codecharReferenceproduct
combination_indicescharproduct
company_currency_idmany2one res.currencyValuation Currencystock_account
cost_methodselectionstock_account
country_of_originmany2one res.countryOrigin of Goodsstock_delivery
date_fromdateMargin Date Fromproduct_margin
date_todateMargin Date Toproduct_margin
default_codecharInternal Referenceproduct
event_ticket_idsone2many event.event.ticketEvent Ticketsevent_product
expected_marginfloatExpected Marginproduct_margin
expected_margin_ratefloatExpected Margin (%)product_margin
expense_job_position_limit_idsone2many hr.expense.product.job.position.limitJob Position Limitshr_expense
extra_uom_idsmany2many uom.uomExtra Packagingsproduct
free_qtyfloatFree To Useproduct
fsm_quantityfloatMaterial Quantityplanning_field_service_sale_timesheetE
gelato_product_uidcharsale_gelato
gelato_variant_image_idsone2many product.documentGelato Variant Print Imagessale_gelato
has_imagebooleanstock_barcodeE
hs_codecharHS Codestock_delivery
image_1024imageImage 1024product
image_128imageImage 128product
image_1920imageImageproduct
image_256imageImage 256product
image_512imageImage 512product
image_fetch_pendingbooleanproduct_images
image_variant_1024imageVariant Image 1024product
image_variant_128imageVariant Image 128product
image_variant_1920imageVariant Imageproduct
image_variant_256imageVariant Image 256product
image_variant_512imageVariant Image 512product
import_attribute_valuescharProduct Valuesproduct
incoming_qtyfloatIncomingproduct
intrastat_code_idmany2one account.intrastat.codeaccount_intrastatE
intrastat_origin_country_idmany2one res.countryCountry of Originaccount_intrastatE
intrastat_supplementary_unitselectionaccount_intrastatE
intrastat_supplementary_unit_amountfloatSupplementary Unitsaccount_intrastatE
invoice_stateselectionInvoice Stateproduct_margin
is_booking_feebooleanwebsite_appointment_saleE
is_favoritebooleanproduct
is_image_fetch_pendingbooleanproduct_barcodelookupE
is_in_purchase_orderbooleanpurchase
is_in_selected_section_of_orderbooleanproduct
is_kitsbooleanmrp
is_product_variantbooleanproduct
is_tax_productbooleanIs a tax productpos_sale_planningE
l10n_eg_eta_codecharETA Codel10n_eg_edi_eta
l10n_in_hsn_missing_in_posbooleanHSN Missing in POSl10n_in_pos
l10n_ke_hsn_codecharHSN codel10n_ke_edi_tremol
l10n_ke_hsn_namecharHSN descriptionl10n_ke_edi_tremol
l10n_ke_is_insurance_applicablebooleanInsurance Applicablel10n_ke_edi_oscuE
l10n_ke_item_codecharItem Codel10n_ke_edi_oscuE
l10n_ke_origin_country_idmany2one res.countryOrigin Countryl10n_ke_edi_oscuE
l10n_ke_packaging_quantityfloatPackage Quantityl10n_ke_edi_oscuE
l10n_ke_packaging_unit_idmany2one l10n_ke_edi_oscu.codePackaging Unitl10n_ke_edi_oscuE
l10n_ke_product_type_codeselectioneTIMS Product Typel10n_ke_edi_oscuE
l10n_tr_ctsp_numbercharCTSP Numberl10n_tr_nilvera_einvoiceE
l10n_tr_customer_line_codecharCustomer Line Codel10n_tr_nilvera_einvoiceE
l10n_tr_seller_line_codecharSeller Line Codel10n_tr_nilvera_einvoiceE
lot_properties_definitionproperties_definitionLot Propertiesstock
lst_pricefloatSales Priceproduct
manufacturer_product_idcharNS-PIDdelivery_fedex_certifiedE
monthly_demandfloatpurchase_stock
mrp_product_qtyfloatManufacturedmrp
nbr_moves_inintegerstock
nbr_moves_outintegerstock
nbr_reordering_rulesintegerReordering Rulesstock
needs_pricer_updatebooleanpricerE
normal_costfloatNormal Costproduct_margin
offer_countintegersale_amazonE
on_sale_pricefloatpricerE
orderpoint_idsone2many stock.warehouse.orderpointMinimum Stock Rulesstock
outgoing_qtyfloatOutgoingproduct
packaging_idsone2many product.packagingProduct Packagesproduct
partner_refcharCustomer Refproduct
previously_bought_by_customerbooleansale
price_extrafloatVariant Price Extraproduct
pricelist_item_countintegerNumber of price rulesproduct
pricelist_rule_idsone2many product.pricelist.itemPricelist Rulesproduct
pricer_display_pricecharpricerE
pricer_product_to_create_or_updatebooleanpos_pricerE
pricer_sale_pricelist_idmany2one product.pricelistPricer Sales Pricelistpos_pricerE
pricer_store_idmany2one pricer.storePricer StorepricerE
pricer_tag_idsone2many pricer.tagPricer tags idspricerE
pricer_tags_pricelist_idmany2one product.pricelistpricerE
product_catalog_product_is_in_bombooleanmrp
product_catalog_product_is_in_mobooleanmrp
product_catalog_product_is_in_repairbooleanrepair
product_catalog_product_is_in_sale_orderbooleansale
product_document_countintegerDocuments Countproduct
product_document_idsone2many product.documentDocumentsproduct
product_template_attribute_value_idsmany2many product.template.attribute.valueAttribute Valuesproduct
product_template_image_idsone2manywebsite_sale
product_template_variant_value_idsmany2many product.template.attribute.valueAttributesproduct
product_tmpl_idmany2one product.templateProduct Templateproduct
product_uom_idsone2many product.uomUnit Barcodeproduct
product_variant_image_idsone2many product.imageExtra Variant Imageswebsite_sale
purchase_avg_pricefloatAvg. Purchase Unit Priceproduct_margin
purchase_gapfloatPurchase Gapproduct_margin
purchase_num_invoicedfloat# Invoiced in Purchaseproduct_margin
purchase_order_line_idsone2many purchase.order.linePO Linespurchase_stock
purchased_product_qtyfloatPurchasedpurchase
putaway_rule_idsone2many stock.putaway.rulePutaway Rulesstock
qty_availablefloatQuantity On Handproduct
qty_in_rentfloatQuantity currently in rentsale_rentingE
quality_control_point_qtyintegerquality_controlE
quality_fail_qtyintegerquality_controlE
quality_pass_qtyintegerquality_controlE
quantity_decreasablebooleanplanning_field_service_sale_stockE
quantity_decreasable_sumintegerplanning_field_service_sale_stockE
quantity_svlfloatstock_account
reordering_max_qtyfloatstock
reordering_min_qtyfloatstock
ribbon_idmany2one product.ribbonVariant Ribbonwebsite_sale
sale_avg_pricefloatAvg. Sale Unit Priceproduct_margin
sale_expectedfloatExpected Saleproduct_margin
sale_num_invoicedfloat# Invoiced in Saleproduct_margin
sales_countfloatSoldsale
sales_gapfloatSales Gapproduct_margin
schedule_countintegerSchedulesmrp_mpsE
serial_missingbooleanplanning_field_service_sale_stockE
show_forecasted_qty_status_buttonbooleanstock
show_on_hand_qty_status_buttonbooleanstock
show_qty_update_buttonbooleanstock
sold_by_vendor_idmany2one res.partnerVendorpurchase
standard_pricefloatCostproduct
standard_price_update_warningcharhr_expense
stock_move_idsone2many stock.movestock
stock_notification_partner_idsmany2many res.partnerBack in stock Notificationswebsite_sale_stock
stock_quant_idsone2many stock.quantstock
stock_valuation_layer_idsone2many stock.valuation.layerstock_account
storage_category_capacity_idsone2many stock.storage.category.capacityStorage Category Capacitystock
stripe_issuing_activatedbooleanhr_expense_stripeE
stripe_mcc_idsone2many product.mcc.stripe.tagMerchant Category Code (MCC)hr_expense_stripeE
subscription_rule_idsone2many product.pricelist.itemSubscription Pricingssale_subscriptionE
suggest_estimated_pricefloatpurchase_stock
suggested_qtyintegerpurchase_stock
tax_stringcharaccount
total_costfloatTotal Costproduct_margin
total_marginfloatTotal Marginproduct_margin
total_margin_ratefloatTotal Margin Rate(%)product_margin
total_valuemonetaryTotal Valuestock_account
turnoverfloatTurnoverproduct_margin
used_in_bom_countinteger# BoM Where Usedmrp
valid_eanbooleanBarcode is valid EANstock
valuationselectionstock_account
value_svlfloatstock_account
variant_bom_idsone2many mrp.bomBOM Product Variantsmrp
variant_image_idsmany2many product.imageVariant Extra Imageswebsite_sale
variant_ribbon_idmany2one product.ribbonVariant Ribbonwebsite_sale
virtual_availablefloatForecasted Quantityproduct
volumefloatVolumeproduct
website_idmany2onewebsite_sale
website_urlcharWebsite URLwebsite_sale
weightfloatWeightproduct
write_datedatetimeproduct
Coverage. Odoo 16 to 17 and 17 to 18 compare Community modules only (the Enterprise 16 and 17 sources are not available to us). Odoo 18 to 19 and 19 to 20 include Community and Enterprise modules. Everything here comes from a static read of the Odoo source code: a field counts as removed only when no parent model, mixin or delegated model still provides it. Fields created dynamically at run time can be missed, and entries we could not confirm are marked as low confidence.