Product Ingredients

product_ingredient
REPOSITORY
REPOSITORYOCA/product-attribute
GIT
GIThttps://github.com/OCA/product-attribute.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/product-attribute/tree/18.0/product_ingredient
VERSION
VERSION 1.0.1
CATEGORY
CATEGORYTechnical Settings
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSsergio-teruel, Weblate, OCA-git-bot, David Bañón
WEBSITE
WEBSITEhttps://github.com/OCA/product-attribute
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:13
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - uom
    - stock
    - barcodes_gs1_nomenclature
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES openupgradelib
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
This module allows to set ingredients information for a given product.

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
product_attribute_value_form_view product.attribute.value.form product.attribute.value form New
product_ingredient_form_view product.ingredient.form.view product.ingredient form New
product_normal_form_view product.product page Inherits product.product_normal_form_view
product_template_only_form_view product.template page Inherits product.product_template_only_form_view
view_production_lot_form stock.lot xpath Inherits stock.view_production_lot_form
Models touched (8)

New fields (0)

No new fields.

Public methods (1)
  • get_allergen_id(self)
    @api.model@ormcache()
    Helper to get allergen attribute id

New fields (0)

No new fields.

Public methods (1)
  • default_get(self, fields_list)
    @api.model

New fields (4)
  • allergen_id Many2one → product.attribute.value
    comodel_name='product.attribute.value' context={'set_allergen_attribute': True, 'show_attribute': False} domain=<expr>
  • is_allergen Boolean
  • name Char
    translate=True
  • scientific_name Char
Public methods (0)

No public methods.

New fields (7)
  • allergen_id Many2one
    related='ingredient_id.allergen_id'
  • ingredient_id Many2one → product.ingredient
    comodel_name='product.ingredient'
  • is_allergen Boolean
    related='ingredient_id.is_allergen'
  • percentage Float
    digits='Product Unit of Measure'
  • product_id Many2one → product.product
    comodel_name='product.product'
  • scientific_name Char
    related='ingredient_id.scientific_name'
  • sequence Integer
Public methods (0)

No public methods.

New fields (4)
  • allergen_ids Many2many → product.attribute.value
    comodel_name='product.attribute.value' compute='_compute_allergen_id' string='Allergens'
  • ingredient_additional_info Text
    translate=True
  • ingredient_allergen_trace_ids Many2many → product.attribute.value
    comodel_name='product.attribute.value' context={'set_allergen_attribute': True, 'show_attribute': False} domain=<expr> string='Allergen traces'
  • ingredient_ids One2many → product.ingredient.value
    comodel_name='product.ingredient.value' inverse_name='product_id' string='Ingredients'
Public methods (0)

No public methods.

New fields (4)
  • allergen_ids Many2many
    related='product_variant_ids.allergen_ids'
  • ingredient_additional_info Text
    readonly=False related='product_variant_ids.ingredient_additional_info'
  • ingredient_allergen_trace_ids Many2many
    readonly=False related='product_variant_ids.ingredient_allergen_trace_ids'
  • ingredient_ids One2many
    readonly=False related='product_variant_ids.ingredient_ids'
Public methods (0)

No public methods.

New fields (3)
  • ingredient_additional_info Text
    compute='_compute_ingredient_values' readonly=False store=True translate=True
  • ingredient_allergen_trace_ids Many2many → product.attribute.value
    comodel_name='product.attribute.value' compute='_compute_ingredient_values' context={'set_allergen_attribute': True, 'show_attribute': False} domain=<expr> readonly=False store=True
  • ingredient_ids One2many → stock.lot.ingredient.value
    comodel_name='stock.lot.ingredient.value' compute='_compute_ingredient_values' inverse_name='lot_id' readonly=False store=True
Public methods (0)

No public methods.

New fields (7)
  • allergen_id Many2one
    related='ingredient_id.allergen_id'
  • ingredient_id Many2one → product.ingredient
    comodel_name='product.ingredient'
  • is_allergen Boolean
    related='ingredient_id.is_allergen'
  • lot_id Many2one → stock.lot
    comodel_name='stock.lot'
  • percentage Float
    digits='Product Unit of Measure'
  • scientific_name Char
    related='ingredient_id.scientific_name'
  • sequence Integer
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/product-attribute
GIT
GIThttps://github.com/OCA/product-attribute.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/product-attribute/tree/15.0/product_ingredient
VERSION
VERSION 1.0.0
CATEGORY
CATEGORYTechnical Settings
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSCarlos Dauden, Weblate, OCA-git-bot, oca-ci
WEBSITE
WEBSITEhttps://github.com/OCA/product-attribute
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:35
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - product
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - uom
    - stock
    - barcodes
    - digest
    - portal
    - web_editor
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES openupgradelib
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (5)
XML IDNameModelTypeStatus
product_attribute_value_form_view product.attribute.value.form product.attribute.value form New
product_ingredient_form_view product.ingredient.form.view product.ingredient form New
product_normal_form_view product.product page Inherits product.product_normal_form_view
product_template_only_form_view product.template page Inherits product.product_template_only_form_view
view_production_lot_form stock.production.lot xpath Inherits stock.view_production_lot_form
Models touched (8)

New fields (0)

No new fields.

Public methods (1)
  • get_allergen_id(self)
    @api.model@ormcache()
    Helper to get allergen attribute id

New fields (0)

No new fields.

Public methods (1)
  • default_get(self, fields_list)
    @api.model

New fields (4)
  • allergen_id Many2one → product.attribute.value
    comodel_name='product.attribute.value' context={'set_allergen_attribute': True, 'show_attribute': False} domain=<expr>
  • is_allergen Boolean
  • name Char
    translate=True
  • scientific_name Char
Public methods (0)

No public methods.

New fields (7)
  • allergen_id Many2one
    related='ingredient_id.allergen_id'
  • ingredient_id Many2one → product.ingredient
    comodel_name='product.ingredient'
  • is_allergen Boolean
    related='ingredient_id.is_allergen'
  • percentage Float
    digits='Product Unit of Measure'
  • product_id Many2one → product.product
    comodel_name='product.product'
  • scientific_name Char
    related='ingredient_id.scientific_name'
  • sequence Integer
Public methods (0)

No public methods.

New fields (4)
  • allergen_id Many2many → product.attribute.value
    comodel_name='product.attribute.value' compute='_compute_allergen_id'
  • ingredient_additional_info Text
    translate=True
  • ingredient_allergen_trace_ids Many2many → product.attribute.value
    comodel_name='product.attribute.value' context={'set_allergen_attribute': True, 'show_attribute': False} domain=<expr> string='Allergen traces'
  • ingredient_ids One2many → product.ingredient.value
    comodel_name='product.ingredient.value' inverse_name='product_id'
Public methods (0)

No public methods.

New fields (4)
  • allergen_id Many2many
    related='product_variant_ids.allergen_id'
  • ingredient_additional_info Text
    readonly=False related='product_variant_ids.ingredient_additional_info'
  • ingredient_allergen_trace_ids Many2many
    readonly=False related='product_variant_ids.ingredient_allergen_trace_ids'
  • ingredient_ids One2many
    readonly=False related='product_variant_ids.ingredient_ids'
Public methods (0)

No public methods.

New fields (7)
  • allergen_id Many2one
    related='ingredient_id.allergen_id'
  • ingredient_id Many2one → product.ingredient
    comodel_name='product.ingredient'
  • is_allergen Boolean
    related='ingredient_id.is_allergen'
  • lot_id Many2one → stock.production.lot
    comodel_name='stock.production.lot'
  • percentage Float
    digits='Product Unit of Measure'
  • scientific_name Char
    related='ingredient_id.scientific_name'
  • sequence Integer
Public methods (0)

No public methods.

New fields (3)
  • ingredient_additional_info Text
    compute='_compute_ingredient_values' readonly=False store=True translate=True
  • ingredient_allergen_trace_ids Many2many → product.attribute.value
    comodel_name='product.attribute.value' compute='_compute_ingredient_values' context={'set_allergen_attribute': True, 'show_attribute': False} domain=<expr> readonly=False store=True
  • ingredient_ids One2many → production.lot.ingredient.value
    comodel_name='production.lot.ingredient.value' compute='_compute_ingredient_values' inverse_name='lot_id' readonly=False store=True
Public methods (0)

No public methods.

STATUS
STATUSOpen migration PR - not merged yet for this version
REPOSITORY
REPOSITORYOCA/product-attribute
PULL REQUEST
PULL REQUEST[16.0][MIG] product_ingredient: Migration to 16.0 (#2277)