product.product: campos, relaciones y API
El modelo product.product («Variante de producto») es un modelo persistente declarado por el módulo Products & Pricelists y ampliado por 34 módulos más. Expone 139 campos, 110 de ellos declarados directamente en el modelo; 107 campos de otros modelos apuntan a él. A continuación encontrará cada campo con su nombre técnico, tipo, etiqueta en español y relaciones, y un ejemplo de llamada a la API JSON-2 de Odoo 20.
Ficha de identidad
- Nombre técnico
product.product- Etiqueta
- Variante de producto
- Tipo
- Persistente (models.Model)
- Tabla SQL
product_product- Módulo de origen
- Products & Pricelists (
product) - Ampliado por
- 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
- Orden por defecto (_order)
default_code, name, id- Hereda de (mixins)
- mail.threadmail.activity.mixinpos.load.mixinwebsite.structured_data.mixinwebsite.trackable.mixin
- Delegación (_inherits)
- product.template: los campos de este modelo también están disponibles, mediante
product_tmpl_id
Campos del modelo
110 campos propios, 24 heredados de mixins y 5 campos automáticos del ORM. Haga clic en un nombre para obtener el enlace directo al campo.
139 de 139 campos mostrados
| Nombre técnico | Etiqueta | Tipo | Detalles |
|---|---|---|---|
| active | Activo Si no está marcado, permitirá ocultar el producto sin eliminarlo. | boolean | |
| additional_product_tag_ids | Etiquetas de la variante | many2many | |
| all_product_tag_ids | Todas las etiquetas de producto | many2many | calculado |
| avg_cost | Coste promedio | monetary | calculado añadido por WMS Accounting ( |
| barcode | Código de barras Número de artículo internacional usado para la identificación de producto. | char | |
| base_unit_count | Unidad de referencia Display base unit price. Set to 0 to hide it for this product. | float | obligatorio |
| base_unit_id | Custom Unit of Measure Define a custom unit to display in the price per unit of measure field. | many2one | |
| base_unit_name | Base Unit Name Displays the custom unit for the products if defined or the selected unit of measure otherwise. | char | calculado |
| base_unit_price | Price Per Unit | monetary | calculado |
| bom_count | N.° de la lista de materiales | integer | calculado añadido por Fabricación ( |
| bom_line_ids | Componentes de LdM | one2many | inverso: añadido por Fabricación ( |
| can_image_1024_be_zoomed | La imagen 1024 puede ampliarse | boolean | calculado |
| can_image_variant_1024_be_zoomed | ¿Se puede ampliar la imagen 1024 de la variante? | boolean | calculado, almacenado |
| catalog_is_in_order | Catalog Is In Order | boolean | |
| catalog_is_in_selected_section | Catalog Is In Selected Section | boolean | añadido por Facturación ( |
| channel_ids | Cursos | one2many | inverso: añadido por Sell Courses ( |
| code | Referencia | char | calculado |
| combination_indices | Índices de combinación | char | calculado, almacenado |
| company_currency_id | Moneda de la valoración Campo técnico para mostrar correctamente la moneda elegida de la empresa que corresponde con el valor total de las capas de valoración del producto | many2one | calculado añadido por WMS Accounting ( |
| country_of_origin | Origen de los bienes 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 | añadido por Delivery - Stock ( |
| date_from | Fecha desde del margen | date | calculado añadido por Margins by Products ( |
| date_to | Fecha hasta del margen | date | calculado añadido por Margins by Products ( |
| default_code | Referencia interna | char | |
| event_ticket_ids | Entradas del evento | one2many | inverso: añadido por Events Product ( |
| expected_margin | Margen previsto Venta prevista - Coste normal | float | calculado añadido por Margins by Products ( |
| expected_margin_rate | Margen previsto (%) Margen previsto * 100 / Venta prevista | float | calculado añadido por Margins by Products ( |
| expense_job_position_limit_ids | Job Position Limits | one2many | inverso: añadido por Gastos ( |
| extra_uom_ids | Extra Packagings Variant-specific additional packagings for this product which can be used for sales | many2many→ uom.uom | |
| free_qty | Cantidad 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 | calculado |
| gelato_product_uid | UID del producto de Gelato | char | solo lectura añadido por Gelato ( |
| gelato_variant_image_ids | Gelato Variant Print Images To ensure a good printing result, upload a PNG of the entire printing area with your graphics correctly placed on it. | one2many | solo lectura inverso: añadido por Gelato ( |
| hs_code | Código HS Código estandarizado para envíos internacionales y declaración de bienes. | char | añadido por Delivery - Stock ( |
| image_1024 | Imagen 1024 | image | calculado |
| image_128 | Imagen 128 | image | calculado |
| image_1920 | Imagen | image | calculado |
| image_256 | Imagen 256 | image | calculado |
| image_512 | Imagen 512 | image | calculado |
| image_variant_1024 | Imagen de variante 1024 | image | related: |
| image_variant_128 | Imagen de variante 128 | image | related: |
| image_variant_1920 | Imagen de variante | image | |
| image_variant_256 | Imagen de variante 256 | image | related: |
| image_variant_512 | Imagen de variante 512 | image | related: |
| import_attribute_values | Valores del producto | char | calculado |
| incoming_qty | Entrante 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 | calculado |
| invoice_state | Estado de la factura | selection | solo lecturacalculado Valores: añadido por Margins by Products ( |
| is_favorite | Es favorito | boolean | related: |
| is_kits | Es un kit | boolean | calculado añadido por Fabricación ( |
| is_product_variant | Es una variante de producto | boolean | calculado |
| lot_properties_definition | Propiedades del lote | properties_definition | añadido por Inventario ( |
| lst_price | Precio de venta The sale price can be set manually or computed from the product template. Click on the 'Configure Variants' button to set the extra attribute prices. | float | calculado, almacenado |
| monthly_demand | Demanda mensual | float | calculado añadido por Purchase Stock ( |
| mrp_product_qty | Fabricado | float | calculado añadido por Fabricación ( |
| nbr_moves_in | Número de movimientos de entrada Número de movimientos de stock entrante en los últimos 12 meses | integer | calculado añadido por Inventario ( |
| nbr_moves_out | Número de movimientos de salida Número de movimientos de stock saliente en los últimos 12 meses | integer | calculado añadido por Inventario ( |
| nbr_reordering_rules | Reglas de reabastecimiento | integer | calculado añadido por Inventario ( |
| normal_cost | Coste normal Suma de la multiplicación de los precios de coste y cantidad de facturas de proveedores | float | calculado añadido por Margins by Products ( |
| orderpoint_ids | Reglas de stock mínimo | one2many | inverso: añadido por Inventario ( |
| outgoing_qty | Saliente 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 | calculado |
| partner_ref | Ref. del cliente | char | calculado |
| previously_bought_by_customer | Previously Bought By Customer | boolean | añadido por Ventas ( |
| price_extra | Precio adicional de la variante Esta es la suma de los precios adicionales de todos los atributos | float | calculado |
| pricelist_rule_ids | Reglas de la lista de precios | one2many | calculado inverso: |
| product_document_count | Número de documentos | integer | calculado |
| product_document_ids | Documentos | one2many | inverso: |
| product_template_attribute_value_ids | Valores de atributo | many2many | |
| product_template_image_ids | Product Template Image | one2many | related: añadido por Comercio electrónico ( |
| product_template_variant_value_ids | Atributos | many2many | |
| product_tmpl_id | Plantilla de producto | many2one | obligatorio |
| product_uom_ids | Código de barras de la unidad | one2many | inverso: |
| purchase_avg_price | Precio unitario medio de compra Precio medio en facturas de proveedores | float | calculado añadido por Margins by Products ( |
| purchase_gap | Diferencia de compra Coste normal - Coste total | float | calculado añadido por Margins by Products ( |
| purchase_num_invoiced | # Facturado en compra Suma de Cantidad de facturas de proveedores | float | calculado añadido por Margins by Products ( |
| purchase_order_line_ids | Líneas de pedido de compra | one2many | inverso: añadido por Purchase Stock ( |
| purchased_product_qty | Comprado | float | calculado añadido por Compra ( |
| putaway_rule_ids | Reglas de almacenamiento | one2many | inverso: añadido por Inventario ( |
| qty_available | Cantidad real 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 | calculadodepende de la empresa |
| reordering_max_qty | Cantidad máxima de reabastecimiento | float | calculado añadido por Inventario ( |
| reordering_min_qty | Cantidad mínima de reabastecimiento | float | calculado añadido por Inventario ( |
| sale_avg_price | Precio unitario medio de venta Precio medio en las facturas de clientes. | float | calculado añadido por Margins by Products ( |
| sale_expected | Venta prevista Suma de la multiplicación del precio del catálogo de venta y la cantidad de las facturas de cliente | float | calculado añadido por Margins by Products ( |
| sale_num_invoiced | # Facturado en venta Suma de cantidad en facturas de cliente | float | calculado añadido por Margins by Products ( |
| sales_count | Vendido | float | calculado añadido por Ventas ( |
| sales_gap | Diferencia de ventas Venta prevista - Volumen de negocio | float | calculado añadido por Margins by Products ( |
| show_forecasted_qty_status_button | Mostrar botón de estado de cantidad prevista | boolean | calculado añadido por Inventario ( |
| show_on_hand_qty_status_button | Mostrar botón de estado de cantidad real | boolean | calculado añadido por Inventario ( |
| show_qty_update_button | Mostrar botón para actualizar cantidad | boolean | calculado añadido por Inventario ( |
| sold_by_vendor_id | Proveedor | many2one | añadido por Compra ( |
| standard_price | Coste 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 | depende de la empresa |
| stock_move_ids | Movimiento de stock | one2many | inverso: añadido por Inventario ( |
| stock_quant_ids | Cuanto del stock | one2many | inverso: añadido por Inventario ( |
| storage_category_capacity_ids | Capacidad de la categoría de almacenamiento | one2many | inverso: añadido por Inventario ( |
| suggest_estimated_price | Sugerir precio estimado | float | calculado añadido por Purchase Stock ( |
| suggested_qty | Cantidad sugerida | integer | calculado añadido por Purchase Stock ( |
| tax_string | Cadena de impuesto | char | calculado añadido por Facturación ( |
| total_cost | Coste total Sum of Multiplication of Invoice price and quantity of Vendor Bills | float | calculado añadido por Margins by Products ( |
| total_margin | Margen total Volumen de negocio - Coste total | float | calculado añadido por Margins by Products ( |
| total_margin_rate | Tasa de margen total (%) Margen total * 100 / Volumen de negocio | float | calculado añadido por Margins by Products ( |
| total_value | Valor total | monetary | calculado añadido por WMS Accounting ( |
| turnover | Volumen de negocio Suma de la multiplicación del precio de factura y la cantidad de las facturas de cliente | float | calculado añadido por Margins by Products ( |
| used_in_bom_count | # LdM usados donde | integer | calculado añadido por Fabricación ( |
| valid_ean | El código de barras tiene un EAN válido | boolean | calculado añadido por Inventario ( |
| variant_bom_ids | Variantes de la LdM del producto | one2many→ mrp.bom | inverso: añadido por Fabricación ( |
| variant_image_ids | Variant Extra Images | many2many | calculado, almacenado añadido por Comercio electrónico ( |
| variant_ribbon_id | Cinta de la variante | many2one | añadido por Comercio electrónico ( |
| virtual_available | Cantidad prevista 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 | calculado |
| volume | Volumen | float | |
| website_id | Sitio web | many2one | related: añadido por Comercio electrónico ( |
| website_url | URL del sitio web La URL completa para acceder al documento a través del sitio web. | char | calculado añadido por Comercio electrónico ( |
| weight | Peso | float | |
| write_date | Escribir la fecha | datetime | calculado, almacenado |
| activity_calendar_event_id | Siguiente evento en el calendario de actividades. | many2one | calculado heredado de mail.activity.mixin |
| activity_date_deadline | Fecha límite de la siguiente actividad | date | solo lecturacalculado heredado de mail.activity.mixin |
| activity_exception_decoration | Decoración de Actividad de Excepción Tipo de actividad de excepción en el registro. | selection | calculado Valores: heredado de mail.activity.mixin |
| activity_exception_icon | Icono Icono para indicar una actividad de excepción. | char | calculado heredado de mail.activity.mixin |
| activity_ids | Actividades | one2many | inverso: heredado de mail.activity.mixin |
| activity_plans_ids | Planes de actividades | many2many | calculado heredado de mail.activity.mixin |
| activity_state | Estado de la actividad Status based on activities Overdue: Due date is already passed Today: Activity date is today Planned: Future activities. | selection | calculado Valores: heredado de mail.activity.mixin |
| activity_summary | Resumen de la siguiente actividad | char | related: heredado de mail.activity.mixin |
| activity_type_icon | Icono de tipo de actividad | char | related: heredado de mail.activity.mixin |
| activity_type_id | Tipo de la siguiente actividad | many2one | related: heredado de mail.activity.mixin |
| activity_user_id | Usuario responsable | many2one | solo lecturacalculado heredado de mail.activity.mixin |
| has_message | Tiene un mensaje | boolean | calculado heredado de mail.thread |
| message_attachment_count | Número de archivos adjuntos | integer | calculado heredado de mail.thread |
| message_follower_ids | Seguidores | one2many | inverso: heredado de mail.thread |
| message_has_error | Error de envío de mensaje Si está marcada, algunos mensajes tienen error de envío. | boolean | calculado heredado de mail.thread |
| message_has_error_counter | Número de errores Número de mensajes con error de envío | integer | calculado heredado de mail.thread |
| message_has_sms_error | Error de envío del SMS Si está marcada, algunos mensajes tienen error de envío. | boolean | calculado heredado de mail.thread |
| message_ids | Mensajes | one2many | inverso: heredado de mail.thread |
| message_is_follower | Es un seguidor | boolean | calculado heredado de mail.thread |
| message_needaction | Acción requerida Si está marcada, hay nuevos mensajes que requieren su atención. | boolean | calculado heredado de mail.thread |
| message_needaction_counter | Número de acciones Número de mensajes que requieren una acción | integer | calculado heredado de mail.thread |
| message_partner_ids | Seguidores (Contactos) | many2many | calculado heredado de mail.thread |
| my_activity_date_deadline | Fecha límite de mi actividad | date | solo lecturacalculado heredado de mail.activity.mixin |
| rating_ids | Calificaciones | one2many | inverso: heredado de mail.thread |
| create_date | Creado el | datetime | solo lecturaautomático |
| create_uid | Creado por | many2one | solo lecturaautomático |
| display_name | Nombre mostrado | char | solo lecturacalculadoautomático |
| id | ID | integer | solo lecturaautomático |
| write_uid | Última actualización por | many2one | solo lecturaautomático |
Relaciones
Modelos enlazados desde este modelo
- event.event.ticket: event_ticket_ids
- hr.expense.product.job.position.limit: expense_job_position_limit_ids
- mrp.bom: variant_bom_ids
- mrp.bom.line: bom_line_ids
- product.base.unit: base_unit_id
- product.document: gelato_variant_image_ids, product_document_ids
- product.image: product_template_image_ids, 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.country: country_of_origin
- res.currency: company_currency_id
- res.partner: sold_by_vendor_id
- 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
- uom.uom: extra_uom_ids
Campos de otros modelos que apuntan aquí
- account.analytic.distribution.model: product_id
- account.analytic.line: product_id
- account.invoice.report: product_id
- account.move.line: product_id
- customer.product.reference: product_id
- delivery.carrier: product_id
- delivery.note.wizard.line: product_id
- event.booth.category: product_id
- event.booth.configurator: product_id
- event.event.configurator: additional_product_ids, product_id
- event.sale.report: product_id
- event.type.booth: product_id
- event.type.ticket: additional_product_ids, product_id
- hr.expense: product_id
- hr.expense.product.job.position.limit: 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: default_product_id, discount_product_id, down_payment_product_id, tip_product_id
- pos.order.line: product_id
- pos.pack.operation.lot: product_id
- pos.prep.line: product_id
- pos.preset: delivery_product_id, service_fee_product_id
- product.catalog.line.mixin: product_id
- product.combo.item: product_id
- product.label.layout: product_ids
- product.pricelist.item: product_id
- product.replenish: product_id
- product.stock.notification: product_id
- product.supplierinfo: product_id
- y 45 más
Leer este modelo por la API
Ejemplo de llamada a la API JSON-2 de Odoo 20: lectura de los cinco primeros registros con campos reales del modelo. Sustituya la instancia, la base y la clave API por las suyas.
curl -X POST "https://su-instancia.odoo.com/json/2/product.product/search_read" \
-H "Authorization: bearer $ODOO_API_KEY" \
-H "X-Odoo-Database: su-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}'import requests
BASE_URL = "https://su-instancia.odoo.com/json/2"
headers = {"Authorization": f"bearer {API_KEY}", "X-Odoo-Database": "su-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())- El acceso a la API externa está reservado al plan Custom de Odoo.
- XML-RPC y JSON-RPC se retirarán en Odoo 22 (otoño de 2028): use JSON-2.
- Se aplican los permisos de acceso y las reglas de registro del usuario de la clave.
Citar esta herramienta
¿Escribe un tutorial, una documentación interna o una respuesta en un foro? Copie este enlace para dirigir a sus lectores a la ficha actualizada.
<a href="https://aidoo.ai/es/outils/explorateur-modeles-odoo/product-product">product.product (Odoo 20.0)</a>Fuentes
- Código fuente del modelo en GitHub
- Documentación de Odoo 20: ORM API
- Documentación de Odoo 20: API externa JSON-2
Datos verificados el 25 de septiembre de 2026 · Odoo 20.0 Community
¿Tiene un proyecto Odoo o quiere aprovechar su ERP con la IA? Hablemos
Implantación, desarrollo de módulos, conexión de Claude o ChatGPT a sus datos: cuéntenos su contexto y le responderemos en 24 horas laborables.