| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/product-variant |
| GIT | |
| GIT | https://github.com/OCA/product-variant.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/product-variant/tree/19.0/product_variant_configurator |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Product Variant |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, arantxa-s73 |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/product-variant |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:40:48 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - base_setup - web - bus - web_tour - html_editor - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Provides an abstract model for product variant configuration. It provides the basic functionality for presenting a table with the attributes of a template and the possibility to select one of the valid values. You can try this functionality creating a product variant directly selecting a product template that has attributes. This module also prevents in a configurable way the creation of the product variants when defining the attributes and attribute values of the product template. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_attribute_view_form |
product.attribute.form | product.attribute | field | Inherits product.product_attribute_view_form |
product_category_no_variant_form_view |
product.category.no.variant.form | product.category | field | Inherits product.product_category_form_view |
product_template_no_variant_form_view |
product.template.no.variant.form | product.template | xpath | Inherits product.product_template_only_form_view |
product_variants_view |
product.product.variants.form | product.product | field | Inherits product.product_normal_form_view |
product_variants_view_2 |
product.product.variants.form | product.product | xpath | Inherits product_variant_configurator.product_variants_view |
view_product_configurator_tree |
product.configurator.attribute | list | New |
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)create(self, vals_list)
no_create_variants
Boolean
default=True
help='This check disables the automatic creation of product variants for all the products of this category.'
string="Don't create variants automatically"
onchange_no_create_variants(self)
write(self, values)
can_create_product
Boolean
compute='_compute_can_be_created'
create_product_variant
Boolean
string='Create product now!'
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with the currently selected attributes values on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_attribute_ids
One2many → product.configurator.attribute
comodel_name='product.configurator.attribute'
copy=True
domain=<expr>
inverse_name='owner_id'
string='Product attributes'
product_id
Many2one → product.product
comodel_name='product.product'
string='Product Variant'
product_id_configurator_domain
Binary
compute='_compute_product_id_configurator_domain'
readonly=True
store=False
product_tmpl_id
Many2one → product.template
bypass_search_access=True
comodel_name='product.template'
string='Product Template'
create(self, vals_list)
create_variant_if_needed(self)
unlink(self)
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
string='Attribute'
owner_id
Many2oneReference
index=True
model_field='owner_model'
required=True
string='Owner'
owner_model
Char
required=True
possible_value_ids
Many2many → product.attribute.value
comodel_name='product.attribute.value'
compute='_compute_possible_value_ids'
readonly=True
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
string='Attribute Price Extra'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
required=True
string='Product Template'
value_id
Many2one → product.attribute.value
comodel_name='product.attribute.value'
domain="[('id', 'in', possible_value_ids)]"
string='Value'
No public methods.
No new fields.
Public methods (2)template_price_get(self, prod_id, qty, partner=None)
template_price_rule_get(self, prod_id, qty, partner=None)
No new fields.
Public methods (1)create(self, vals_list)
no_create_variants
Selection
default='no'
help='This selection defines if variants for all attribute combinations are going to be created automatically at saving time.'
required=True
string='Variant creation'
args: [('yes', "Don't create them automatically"), ('no', "Use Odoo's default variant management"), ('empty', 'Use the category value')]
create(self, vals_list)
name_search(self, name='', domain=None, operator='ilike', limit=100)
onchange_no_create_variants(self)
write(self, values)
required
Boolean
default=False
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/product-variant |
| GIT | |
| GIT | https://github.com/OCA/product-variant.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/product-variant/tree/18.0/product_variant_configurator |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Product Variant |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Bhavesh Heliconia |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/product-variant |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:30:13 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - base_setup - web - bus - web_tour - html_editor - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Provides an abstract model for product variant configuration. It provides the basic functionality for presenting a table with the attributes of a template and the possibility to select one of the valid values. You can try this functionality creating a product variant directly selecting a product template that has attributes. This module also prevents in a configurable way the creation of the product variants when defining the attributes and attribute values of the product template. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_attribute_view_form |
product.attribute.form | product.attribute | field | Inherits product.product_attribute_view_form |
product_category_no_variant_form_view |
product.category.no.variant.form | product.category | field | Inherits product.product_category_form_view |
product_template_no_variant_form_view |
product.template.no.variant.form | product.template | xpath | Inherits product.product_template_only_form_view |
product_variants_view |
product.product.variants.form | product.product | field | Inherits product.product_normal_form_view |
product_variants_view_2 |
product.product.variants.form | product.product | xpath | Inherits product_variant_configurator.product_variants_view |
view_product_configurator_tree |
product.configurator.attribute | list | New |
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)create(self, vals_list)
no_create_variants
Boolean
default=True
help='This check disables the automatic creation of product variants for all the products of this category.'
string="Don't create variants automatically"
onchange_no_create_variants(self)
write(self, values)
can_create_product
Boolean
compute='_compute_can_be_created'
create_product_variant
Boolean
string='Create product now!'
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with the currently selected attributes values on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_attribute_ids
One2many → product.configurator.attribute
comodel_name='product.configurator.attribute'
copy=True
domain=<expr>
inverse_name='owner_id'
string='Product attributes'
product_id
Many2one → product.product
comodel_name='product.product'
string='Product Variant'
product_id_configurator_domain
Binary
compute='_compute_product_id_configurator_domain'
readonly=True
store=False
product_tmpl_id
Many2one → product.template
auto_join=True
comodel_name='product.template'
string='Product Template'
create(self, vals_list)
create_variant_if_needed(self)
unlink(self)
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
string='Attribute'
owner_id
Many2oneReference
index=True
model_field='owner_model'
required=True
string='Owner'
owner_model
Char
required=True
possible_value_ids
Many2many → product.attribute.value
comodel_name='product.attribute.value'
compute='_compute_possible_value_ids'
readonly=True
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
string='Attribute Price Extra'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
required=True
string='Product Template'
value_id
Many2one → product.attribute.value
comodel_name='product.attribute.value'
domain="[('id', 'in', possible_value_ids)]"
string='Value'
No public methods.
No new fields.
Public methods (2)template_price_get(self, prod_id, qty, partner=None)
template_price_rule_get(self, prod_id, qty, partner=None)
No new fields.
Public methods (1)create(self, vals_list)
no_create_variants
Selection
default='no'
help='This selection defines if variants for all attribute combinations are going to be created automatically at saving time.'
required=True
string='Variant creation'
args: [('yes', "Don't create them automatically"), ('no', "Use Odoo's default variant management"), ('empty', 'Use the category value')]
create(self, vals_list)
name_search(self, name='', args=None, operator='ilike', limit=100)
onchange_no_create_variants(self)
write(self, values)
required
Boolean
default=False
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/product-variant |
| GIT | |
| GIT | https://github.com/OCA/product-variant.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/product-variant/tree/17.0/product_variant_configurator |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Product Variant |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| COMMITTERS | |
| COMMITTERS | manu, Weblate, OCA-git-bot, oca-ci |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/product-variant |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 19:20:06 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - base_setup - web - bus - web_tour - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | Provides an abstract model for product variant configuration. It provides the basic functionality for presenting a table with the attributes of a template and the possibility to select one of the valid values. You can try this functionality creating a product variant directly selecting a product template that has attributes. This module also prevents in a configurable way the creation of the product variants when defining the attributes and attribute values of the product template. |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_attribute_view_form |
product.attribute.form | product.attribute | field | Inherits product.product_attribute_view_form |
product_category_no_variant_form_view |
product.category.no.variant.form | product.category | field | Inherits product.product_category_form_view |
product_template_no_variant_form_view |
product.template.no.variant.form | product.template | xpath | Inherits product.product_template_only_form_view |
product_variants_view |
product.product.variants.form | product.product | field | Inherits product.product_normal_form_view |
product_variants_view_2 |
product.product.variants.form | product.product | xpath | Inherits product_variant_configurator.product_variants_view |
view_product_configurator_tree |
product.configurator.attribute | tree | New |
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)create(self, vals_list)
no_create_variants
Boolean
default=True
help='This check disables the automatic creation of product variants for all the products of this category.'
string="Don't create variants automatically"
onchange_no_create_variants(self)
write(self, values)
can_create_product
Boolean
compute='_compute_can_be_created'
create_product_variant
Boolean
string='Create product now!'
price_extra
Float
compute='_compute_can_be_created'
digits='Product Price'
help='Price Extra: Extra price for the variant with the currently selected attributes values on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_attribute_ids
One2many → product.configurator.attribute
comodel_name='product.configurator.attribute'
copy=True
domain=<expr>
inverse_name='owner_id'
string='Product attributes'
product_id
Many2one → product.product
comodel_name='product.product'
string='Product Variant'
product_id_configurator_domain
Binary
compute='_compute_product_id_configurator_domain'
readonly=True
store=False
product_tmpl_id
Many2one → product.template
auto_join=True
comodel_name='product.template'
string='Product Template'
create(self, vals_list)
create_variant_if_needed(self)
unlink(self)
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
string='Attribute'
owner_id
Many2oneReference
index=True
model_field='owner_model'
required=True
string='Owner'
owner_model
Char
required=True
possible_value_ids
Many2many → product.attribute.value
comodel_name='product.attribute.value'
compute='_compute_possible_value_ids'
readonly=True
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
string='Attribute Price Extra'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
required=True
string='Product Template'
value_id
Many2one → product.attribute.value
comodel_name='product.attribute.value'
domain="[('id', 'in', possible_value_ids)]"
string='Value'
No public methods.
No new fields.
Public methods (2)template_price_get(self, prod_id, qty, partner=None)
template_price_rule_get(self, prod_id, qty, partner=None)
No new fields.
Public methods (2)create(self, vals_list)
name_get(self)
no_create_variants
Selection
default='no'
help='This selection defines if variants for all attribute combinations are going to be created automatically at saving time.'
required=True
string='Variant creation'
args: [('yes', "Don't create them automatically"), ('no', "Use Odoo's default variant management"), ('empty', 'Use the category value')]
create(self, vals_list)
name_search(self, name='', args=None, operator='ilike', limit=100)
onchange_no_create_variants(self)
write(self, values)
required
Boolean
default=False
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/product-variant |
| GIT | |
| GIT | https://github.com/OCA/product-variant.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/product-variant/tree/16.0/product_variant_configurator |
| VERSION | |
| VERSION | 1.0.8 |
| CATEGORY | |
| CATEGORY | Product Variant |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| COMMITTERS | |
| COMMITTERS | Stéphane Bidoul, Jordi Ballester Alomar, Víctor Martínez, Weblate, OCA-git-bot, oca-ci, Justine Doutreloux, Carolina Fernandez, SergiCForgeFlow, hda, Mantux11, Alexandra Bottemanne |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/product-variant |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:53:48 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - base_setup - web - bus - web_tour - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_attribute_view_form |
product.attribute.form | product.attribute | field | Inherits product.product_attribute_view_form |
product_category_no_variant_form_view |
product.category.no.variant.form | product.category | field | Inherits product.product_category_form_view |
product_template_no_variant_form_view |
product.template.no.variant.form | product.template | xpath | Inherits product.product_template_only_form_view |
product_variants_view |
product.product.variants.form | product.product | field | Inherits product.product_normal_form_view |
product_variants_view_2 |
product.product.variants.form | product.product | xpath | Inherits product_variant_configurator.product_variants_view |
view_product_configurator_tree |
product.configurator.attribute | tree | New |
No new fields.
Public methods (0)No public methods.
No new fields.
Public methods (1)create(self, vals_list)
no_create_variants
Boolean
default=True
help='This check disables the automatic creation of product variants for all the products of this category.'
string="Don't create variants automatically"
onchange_no_create_variants(self)
write(self, values)
can_create_product
Boolean
compute='_compute_can_be_created'
create_product_variant
Boolean
string='Create product now!'
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with the currently selected attributes values on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_attribute_ids
One2many → product.configurator.attribute
comodel_name='product.configurator.attribute'
copy=True
domain=<expr>
inverse_name='owner_id'
string='Product attributes'
product_id
Many2one → product.product
comodel_name='product.product'
string='Product Variant'
product_id_configurator_domain
Binary
compute='_compute_product_id_configurator_domain'
readonly=True
store=False
product_tmpl_id
Many2one → product.template
auto_join=True
comodel_name='product.template'
string='Product Template'
create(self, vals_list)
create_variant_if_needed(self)
unlink(self)
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
string='Attribute'
owner_id
Many2oneReference
index=True
model_field='owner_model'
required=True
string='Owner'
owner_model
Char
required=True
possible_value_ids
Many2many → product.attribute.value
comodel_name='product.attribute.value'
compute='_compute_possible_value_ids'
readonly=True
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
string='Attribute Price Extra'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
required=True
string='Product Template'
value_id
Many2one → product.attribute.value
comodel_name='product.attribute.value'
domain="[('id', 'in', possible_value_ids)]"
string='Value'
No public methods.
No new fields.
Public methods (2)template_price_get(self, prod_id, qty, partner=None)
template_price_rule_get(self, prod_id, qty, partner=None)
No new fields.
Public methods (2)create(self, vals_list)
name_get(self)
no_create_variants
Selection
default='no'
help='This selection defines if variants for all attribute combinations are going to be created automatically at saving time.'
required=True
string='Variant creation'
args: [('yes', "Don't create them automatically"), ('no', "Use Odoo's default variant management"), ('empty', 'Use the category value')]
create(self, vals_list)
name_search(self, name='', args=None, operator='ilike', limit=100)
onchange_no_create_variants(self)
write(self, values)
required
Boolean
default=False
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/product-variant |
| GIT | |
| GIT | https://github.com/OCA/product-variant.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/product-variant/tree/15.0/product_variant_configurator |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Product Variant |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Jasmin Solanki |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/product-variant |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:46:35 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - base_setup - web - bus - web_tour - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_attribute_view_form |
product.attribute.form | product.attribute | field | Inherits product.product_attribute_view_form |
product_category_no_variant_form_view |
product.category.no.variant.form | product.category | field | Inherits product.product_category_form_view |
product_template_no_variant_form_view |
product.template.no.variant.form | product.template | xpath | Inherits product.product_template_only_form_view |
product_variants_view |
product.product.variants.form | product.product | field | Inherits product.product_normal_form_view |
product_variants_view_2 |
product.product.variants.form | product.product | xpath | Inherits product_variant_configurator.product_variants_view |
view_product_configurator_tree |
product.configurator.attribute | tree | New |
No new fields.
Public methods (1)create(self, vals)
no_create_variants
Boolean
default=True
help='This check disables the automatic creation of product variants for all the products of this category.'
string="Don't create variants automatically"
onchange_no_create_variants(self)
write(self, values)
can_create_product
Boolean
compute='_compute_can_be_created'
store=False
create_product_variant
Boolean
string='Create product now!'
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with the currently selected attributes values on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_attribute_ids
One2many → product.configurator.attribute
comodel_name='product.configurator.attribute'
copy=True
domain=<expr>
inverse_name='owner_id'
string='Product attributes'
product_id
Many2one → product.product
comodel_name='product.product'
string='Product Variant'
product_tmpl_id
Many2one → product.template
auto_join=True
comodel_name='product.template'
string='Product Template'
create(self, vals)
create_variant_if_needed(self)
unlink(self)
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
string='Attribute'
owner_id
Many2oneReference
index=True
model_field='owner_model'
required=True
string='Owner'
owner_model
Char
required=True
possible_value_ids
Many2many → product.attribute.value
comodel_name='product.attribute.value'
compute='_compute_possible_value_ids'
readonly=True
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
string='Attribute Price Extra'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
required=True
string='Product Template'
value_id
Many2one → product.attribute.value
comodel_name='product.attribute.value'
domain="[('id', 'in', possible_value_ids)]"
string='Value'
No public methods.
No new fields.
Public methods (2)template_price_get(self, prod_id, qty, partner=None)
template_price_rule_get(self, prod_id, qty, partner=None)
No new fields.
Public methods (2)create(self, vals)
name_get(self)
no_create_variants
Selection
default='no'
help='This selection defines if variants for all attribute combinations are going to be created automatically at saving time.'
required=True
string='Variant creation'
args: [('yes', "Don't create them automatically"), ('no', "Use Odoo's default variant management"), ('empty', 'Use the category value')]
create(self, vals)
name_search(self, name='', args=None, operator='ilike', limit=100)
onchange_no_create_variants(self)
write(self, values)
required
Boolean
default=False
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/product-variant |
| GIT | |
| GIT | https://github.com/OCA/product-variant.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/product-variant/tree/14.0/product_variant_configurator |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Product Variant |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| COMMITTERS | |
| COMMITTERS | Weblate, OCA-git-bot, oca-ci, Héctor Villarreal Ortega |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/product-variant |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:41:01 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - base_setup - web - bus - web_tour - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_attribute_view_form |
product.attribute.form | product.attribute | field | Inherits product.product_attribute_view_form |
product_category_no_variant_form_view |
product.category.no.variant.form | product.category | field | Inherits product.product_category_form_view |
product_template_no_variant_form_view |
product.template.no.variant.form | product.template | xpath | Inherits product.product_template_only_form_view |
product_variants_view |
product.product.variants.form | product.product | field | Inherits product.product_normal_form_view |
product_variants_view_2 |
product.product.variants.form | product.product | xpath | Inherits product_variant_configurator.product_variants_view |
view_product_configurator_tree |
product.configurator.attribute | tree | New |
No new fields.
Public methods (1)create(self, vals)
no_create_variants
Boolean
default=True
help='This check disables the automatic creation of product variants for all the products of this category.'
string="Don't create variants automatically"
onchange_no_create_variants(self)
write(self, values)
can_create_product
Boolean
compute='_compute_can_be_created'
store=False
create_product_variant
Boolean
string='Create product now!'
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with the currently selected attributes values on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_attribute_ids
One2many → product.configurator.attribute
comodel_name='product.configurator.attribute'
copy=True
domain=<expr>
inverse_name='owner_id'
string='Product attributes'
product_id
Many2one → product.product
comodel_name='product.product'
string='Product Variant'
product_tmpl_id
Many2one → product.template
auto_join=True
comodel_name='product.template'
string='Product Template'
create(self, vals)
create_variant_if_needed(self)
unlink(self)
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
string='Attribute'
owner_id
Many2oneReference
index=True
model_field='owner_model'
ondelete='cascade'
required=True
string='Owner'
owner_model
Char
required=True
possible_value_ids
Many2many → product.attribute.value
comodel_name='product.attribute.value'
compute='_compute_possible_value_ids'
readonly=True
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
string='Attribute Price Extra'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
required=True
string='Product Template'
value_id
Many2one → product.attribute.value
comodel_name='product.attribute.value'
domain="[('id', 'in', possible_value_ids)]"
string='Value'
No public methods.
No new fields.
Public methods (2)template_price_get(self, prod_id, qty, partner=None)
template_price_rule_get(self, prod_id, qty, partner=None)
No new fields.
Public methods (2)create(self, vals)
name_get(self)
no_create_variants
Selection
default='no'
help='This selection defines if variants for all attribute combinations are going to be created automatically at saving time.'
required=True
string='Variant creation'
args: [('yes', "Don't create them automatically"), ('no', "Use Odoo's default variant management"), ('empty', 'Use the category value')]
create(self, vals)
name_search(self, name='', args=None, operator='ilike', limit=100)
onchange_no_create_variants(self)
write(self, values)
required
Boolean
default=False
string='Required'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/product-variant |
| GIT | |
| GIT | https://github.com/OCA/product-variant.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/product-variant/tree/13.0/product_variant_configurator |
| VERSION | |
| VERSION | 1.1.6 |
| CATEGORY | |
| CATEGORY | Product Variant |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, david, Jordi Ballester, OCA Transbot, Thomas Binsfeld, oca-travis, Weblate, OCA-git-bot, Héctor Villarreal Ortega, HviorForgeFlow, Rad0van, John |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/product-variant |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:34:14 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - base_setup - web - bus - web_tour - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_attribute_view_form |
product.attribute.form | product.attribute | field | Inherits product.product_attribute_view_form |
product_category_no_variant_form_view |
product.category.no.variant.form | product.category | field | Inherits product.product_category_form_view |
product_template_no_variant_form_view |
product.template.no.variant.form | product.template | xpath | Inherits product.product_template_only_form_view |
product_variants_view |
product.product.variants.form | product.product | field | Inherits product.product_normal_form_view |
product_variants_view_2 |
product.product.variants.form | product.product | xpath | Inherits product_variant_configurator.product_variants_view |
view_product_configurator_tree |
product.configurator.attribute | tree | New |
No new fields.
Public methods (1)create(self, vals)
no_create_variants
Boolean
default=True
help='This check disables the automatic creation of product variants for all the products of this category.'
string="Don't create variants automatically"
onchange_no_create_variants(self)
write(self, values)
can_create_product
Boolean
compute='_compute_can_be_created'
store=False
create_product_variant
Boolean
string='Create product now!'
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with the currently selected attributes values on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_attribute_ids
One2many → product.configurator.attribute
comodel_name='product.configurator.attribute'
copy=True
domain=<expr>
inverse_name='owner_id'
string='Product attributes'
product_id
Many2one → product.product
comodel_name='product.product'
string='Product Variant'
product_tmpl_id
Many2one → product.template
auto_join=True
comodel_name='product.template'
string='Product Template'
create(self, vals)
create_variant_if_needed(self)
unlink(self)
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
string='Attribute'
owner_id
Many2oneReference
index=True
model_field='owner_model'
ondelete='cascade'
required=True
string='Owner'
owner_model
Char
required=True
possible_value_ids
Many2many → product.attribute.value
comodel_name='product.attribute.value'
compute='_compute_possible_value_ids'
readonly=True
price_extra
Float
compute='_compute_price_extra'
digits='Product Price'
help='Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
string='Attribute Price Extra'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
required=True
string='Product Template'
value_id
Many2one → product.attribute.value
comodel_name='product.attribute.value'
domain="[('id', 'in', possible_value_ids)]"
string='Value'
No public methods.
No new fields.
Public methods (2)template_price_get(self, prod_id, qty, partner=None)
template_price_rule_get(self, prod_id, qty, partner=None)
No new fields.
Public methods (2)create(self, vals)
name_get(self)
no_create_variants
Selection
default='no'
help='This selection defines if variants for all attribute combinations are going to be created automatically at saving time.'
required=True
string='Variant creation'
args: [('yes', "Don't create them automatically"), ('no', "Use Odoo's default variant management"), ('empty', 'Use the category value')]
create(self, vals)
name_search(self, name='', args=None, operator='ilike', limit=100)
onchange_no_create_variants(self)
write(self, values)
required
Boolean
default=False
string='Required'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/product-variant |
| GIT | |
| GIT | https://github.com/OCA/product-variant.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/product-variant/tree/12.0/product_variant_configurator |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Product Variant |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| COMMITTERS | |
| COMMITTERS | OCA Transbot, oca-travis, Weblate, OCA-git-bot, Adrià Gil Sorribes |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/product-variant |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:29:19 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - decimal_precision - base_setup - web - bus - web_tour - uom |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
product_attribute_view_form |
product.attribute.form | product.attribute | group | Inherits product.product_attribute_view_form |
product_category_no_variant_form_view |
product.category.no.variant.form | product.category | field | Inherits product.product_category_form_view |
product_template_no_variant_form_view |
product.template.no.variant.form | product.template | xpath | Inherits product.product_template_only_form_view |
product_variants_view |
product.product.variants.form | product.product | field | Inherits product.product_normal_form_view |
view_product_configurator_tree |
product.configurator.attribute | tree | New |
No new fields.
Public methods (1)create(self, vals)
no_create_variants
Boolean
default=True
help='This check disables the automatic creation of product variants for all the products of this category.'
string="Don't create variants automatically"
onchange_no_create_variants(self)
write(self, values)
can_create_product
Boolean
compute='_compute_can_be_created'
store=False
create_product_variant
Boolean
string='Create product now!'
name
Char
price_extra
Float
compute='_compute_price_extra'
digits=dp.get_precision('Product Price')
help='Price Extra: Extra price for the variant with the currently selected attributes values on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_attribute_ids
One2many → product.configurator.attribute
comodel_name='product.configurator.attribute'
copy=True
domain=<expr>
inverse_name='owner_id'
string='Product attributes'
product_id
Many2one → product.product
comodel_name='product.product'
string='Product Variant'
product_tmpl_id
Many2one → product.template
auto_join=True
comodel_name='product.template'
string='Product Template'
create(self, vals)
create_variant_if_needed(self)
unlink(self)
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
string='Attribute'
owner_id
Integer
ondelete='cascade'
required=True
string='Owner'
owner_model
Char
required=True
possible_value_ids
Many2many → product.attribute.value
comodel_name='product.attribute.value'
compute='_compute_possible_value_ids'
readonly=True
price_extra
Float
compute='_compute_price_extra'
digits=dp.get_precision('Product Price')
help='Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
string='Attribute Price Extra'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
required=True
string='Product Template'
value_id
Many2one → product.attribute.value
comodel_name='product.attribute.value'
domain="[('attribute_id', '=', attribute_id), ('id', 'in', possible_value_ids)]"
string='Value'
No public methods.
No new fields.
Public methods (2)template_price_get(self, prod_id, qty, partner=None)
template_price_rule_get(self, prod_id, qty, partner=None)
name
Char
related='product_tmpl_id.name'
create(self, vals)
name_get(self)
no_create_variants
Selection
default='no'
help='This selection defines if variants for all attribute combinations are going to be created automatically at saving time.'
required=True
string='Variant creation'
args: [('yes', "Don't create them automatically"), ('no', "Use Odoo's default variant management"), ('empty', 'Use the category value')]
create(self, vals)
create_variant_ids(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
onchange_no_create_variants(self)
write(self, values)
required
Boolean
default=False
string='Required'
No public methods.
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/product-variant |
| GIT | |
| GIT | https://github.com/OCA/product-variant.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/product-variant/tree/11.0/product_variant_configurator |
| VERSION | |
| VERSION | 1.0.0 |
| CATEGORY | |
| CATEGORY | Product Variant |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, GitHub, OCA Transbot, oca-travis, Weblate, OCA-git-bot, Adrià Gil Sorribes |
| WEBSITE | |
| WEBSITE | https://github.com/OCA/product-variant |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:23:58 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - decimal_precision - base_setup - web - bus - web_tour |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
attribute_price_tree_view |
product.attribute.price.tree | product.attribute.price | tree | New |
product_category_no_variant_form_view |
product.category.no.variant.form | product.category | field | Inherits product.product_category_form_view |
product_template_no_variant_form_view |
product.template.no.variant.form | product.template | div | Inherits product.product_template_only_form_view |
product_variants_view |
product.product.variants.form | product.product | field | Inherits product.product_normal_form_view |
view_product_configurator_tree |
product.configurator.attribute | tree | New |
required
Boolean
default=False
string='Required'
No public methods.
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
related='value_id.attribute_id'
No public methods.
No new fields.
Public methods (1)create(self, vals)
no_create_variants
Boolean
default=True
help='This check disables the automatic creation of product variants for all the products of this category.'
string="Don't create variants automatically"
onchange_no_create_variants(self)
write(self, values)
can_create_product
Boolean
compute='_compute_can_be_created'
store=False
create_product_variant
Boolean
string='Create product now!'
name
Char
price_extra
Float
compute='_compute_price_extra'
digits=dp.get_precision('Product Price')
help='Price Extra: Extra price for the variant with the currently selected attributes values on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_attribute_ids
One2many → product.configurator.attribute
comodel_name='product.configurator.attribute'
copy=True
domain=<expr>
inverse_name='owner_id'
string='Product attributes'
product_id
Many2one → product.product
comodel_name='product.product'
string='Product'
product_tmpl_id
Many2one → product.template
auto_join=True
comodel_name='product.template'
string='Product Template'
create(self, vals)
create_variant_if_needed(self)
unlink(self)
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
string='Attribute'
owner_id
Integer
ondelete='cascade'
required=True
string='Owner'
owner_model
Char
required=True
possible_value_ids
Many2many → product.attribute.value
comodel_name='product.attribute.value'
compute='_compute_possible_value_ids'
readonly=True
price_extra
Float
compute='_compute_price_extra'
digits=dp.get_precision('Product Price')
help='Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
required=True
string='Product Template'
value_id
Many2one → product.attribute.value
comodel_name='product.attribute.value'
domain="[('attribute_id', '=', attribute_id), ('id', 'in', possible_value_ids)]"
string='Value'
No public methods.
No new fields.
Public methods (2)template_price_get(self, prod_id, qty, partner=None)
template_price_rule_get(self, prod_id, qty, partner=None)
name
Char
related='product_tmpl_id.name'
create(self, vals)
name_get(self)
no_create_variants
Selection
default='empty'
help='This selection defines if variants for all attribute combinations are going to be created automatically at saving time.'
required=True
string='Variant creation'
args: [('yes', "Don't create them automatically"), ('no', 'Create them automatically'), ('empty', 'Use the category value')]
action_open_attribute_prices(self)
create(self, vals)
create_variant_ids(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
onchange_no_create_variants(self)
write(self, values)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/product-variant |
| GIT | |
| GIT | https://github.com/OCA/product-variant.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/product-variant/tree/10.0/product_variant_configurator |
| VERSION | |
| VERSION | 2.0.0 |
| CATEGORY | |
| CATEGORY | Product Variant |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, OCA Transbot, oca-travis, Weblate, OCA-git-bot |
| WEBSITE | |
| WEBSITE | https://odoo-community.org/ |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:19:57 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - decimal_precision - base_setup - web_kanban - web - bus - web_tour - report |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
attribute_price_tree_view |
product.attribute.price.tree | product.attribute.price | tree | New |
product_category_no_variant_form_view |
product.category.no.variant.form | product.category | field | Inherits product.product_category_form_view |
product_template_no_variant_form_view |
product.template.no.variant.form | product.template | div | Inherits product.product_template_only_form_view |
product_variants_view |
product.product.variants.form | product.product | field | Inherits product.product_normal_form_view |
view_product_configurator_tree |
product.configurator.attribute | tree | New |
required
Boolean
default=True
args: 'Required'
No public methods.
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
related='value_id.attribute_id'
No public methods.
No new fields.
Public methods (1)create(self, vals)
no_create_variants
Boolean
default=True
help='This check disables the automatic creation of product variants for all the products of this category.'
string="Don't create variants automatically"
onchange_no_create_variants(self)
write(self, values)
can_create_product
Boolean
compute='_compute_can_be_created'
store=False
create_product_variant
Boolean
string='Create product now!'
name
Char
price_extra
Float
compute='_compute_price_extra'
digits=dp.get_precision('Product Price')
help='Price Extra: Extra price for the variant with the currently selected attributes values on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_attribute_ids
One2many → product.configurator.attribute
comodel_name='product.configurator.attribute'
copy=True
domain=<expr>
inverse_name='owner_id'
string='Product attributes'
product_id
Many2one → product.product
comodel_name='product.product'
string='Product'
product_tmpl_id
Many2one → product.template
auto_join=True
comodel_name='product.template'
string='Product Template'
create(self, vals)
create_variant_if_needed(self)
unlink(self)
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
string='Attribute'
owner_id
Integer
ondelete='cascade'
required=True
string='Owner'
owner_model
Char
required=True
possible_value_ids
Many2many → product.attribute.value
comodel_name='product.attribute.value'
compute='_compute_possible_value_ids'
readonly=True
price_extra
Float
compute='_compute_price_extra'
digits=dp.get_precision('Product Price')
help='Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
required=True
string='Product Template'
value_id
Many2one → product.attribute.value
comodel_name='product.attribute.value'
domain="[('attribute_id', '=', attribute_id), ('id', 'in', possible_value_ids[0][2])]"
string='Value'
No public methods.
No new fields.
Public methods (2)template_price_get(self, prod_id, qty, partner=None)
template_price_rule_get(self, prod_id, qty, partner=None)
name
Char
related='product_tmpl_id.name'
create(self, vals)
name_get(self)
no_create_variants
Selection
default='empty'
help='This selection defines if variants for all attribute combinations are going to be created automatically at saving time.'
required=True
string='Variant creation'
args: [('yes', "Don't create them automatically"), ('no', 'Create them automatically'), ('empty', 'Use the category value')]
action_open_attribute_prices(self)
create(self, vals)
create_variant_ids(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
onchange_no_create_variants(self)
write(self, values)
| REPOSITORY | |
|---|---|
| REPOSITORY | OCA/product-variant |
| GIT | |
| GIT | https://github.com/OCA/product-variant.git |
| GIT FOLDER | |
| GIT FOLDER | https://github.com/OCA/product-variant/tree/9.0/product_variant_configurator |
| VERSION | |
| VERSION | 1.0.1 |
| CATEGORY | |
| CATEGORY | Product Variant |
| LICENSE | |
| LICENSE | AGPL-3 |
| APPLICATION | |
| APPLICATION | No |
| AUTO-INSTALLABLE | |
| AUTO-INSTALLABLE | No |
| AUTHORS | |
| AUTHORS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| MAINTAINERS | |
| MAINTAINERS | Tecnativa, Odoo Community Association (OCA), AvanzOSC, ACSONE SA/NV |
| COMMITTERS | |
| COMMITTERS | Pedro M. Baeza, OCA Transbot, Thomas Binsfeld, oca-travis, Weblate, OCA-git-bot |
| WEBSITE | |
| WEBSITE | https://odoo-community.org/ |
| LAST TRACKING UPDATE | |
| LAST TRACKING UPDATE | 2026-07-06 00:15:21 |
| ODOO DEPENDENCIES | |
| ODOO DEPENDENCIES |
odoo/odoo: - product - base - decimal_precision - base_setup - web_kanban - web - bus - report |
| PYTHON DEPENDENCIES | |
| PYTHON DEPENDENCIES | Not have |
| SYSTEM DEPENDENCIES | |
| SYSTEM DEPENDENCIES | Not have |
| DESCRIPTION | |
| DESCRIPTION | |
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
attribute_price_tree_view |
product.attribute.price.tree | product.attribute.price | tree | New |
product_category_no_variant_form_view |
product.category.no.variant.form | product.category | field | Inherits product.product_category_form_view |
product_template_no_variant_form_view |
product.template.no.variant.form | product.template | div | Inherits product.product_template_only_form_view |
product_variants_view |
product.product.variants.form | product.product | field | Inherits product.product_normal_form_view |
view_product_configurator_tree |
product.configurator.attribute | tree | New |
No new fields.
Public methods (0)No public methods.
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
related='value_id.attribute_id'
No public methods.
No new fields.
Public methods (1)create(self, vals)
no_create_variants
Boolean
default=True
help='This check disables the automatic creation of product variants for all the products of this category.'
string="Don't create variants automatically"
onchange_no_create_variants(self)
write(self, values)
can_create_product
Boolean
compute='_compute_can_be_created'
store=False
create_product_variant
Boolean
string='Create product now!'
name
Char
price_extra
Float
compute='_compute_price_extra'
digits=dp.get_precision('Product Price')
help='Price Extra: Extra price for the variant with the currently selected attributes values on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_attribute_ids
One2many → product.configurator.attribute
comodel_name='product.configurator.attribute'
copy=True
domain=<expr>
inverse_name='owner_id'
string='Product attributes'
product_id
Many2one → product.product
comodel_name='product.product'
string='Product'
product_tmpl_id
Many2one → product.template
auto_join=True
comodel_name='product.template'
string='Product Template'
create_variant_if_needed(self)
unlink(self)
attribute_id
Many2one → product.attribute
comodel_name='product.attribute'
readonly=True
string='Attribute'
owner_id
Integer
ondelete='cascade'
required=True
string='Owner'
owner_model
Char
required=True
possible_value_ids
Many2many → product.attribute.value
comodel_name='product.attribute.value'
compute='_compute_possible_value_ids'
readonly=True
price_extra
Float
compute='_compute_price_extra'
digits=dp.get_precision('Product Price')
help='Price Extra: Extra price for the variant with this attribute value on sale price. eg. 200 price extra, 1000 + 200 = 1200.'
product_tmpl_id
Many2one → product.template
comodel_name='product.template'
required=True
string='Product Template'
value_id
Many2one → product.attribute.value
comodel_name='product.attribute.value'
domain="[('attribute_id', '=', attribute_id), ('id', 'in', possible_value_ids[0][2])]"
string='Value'
No public methods.
No new fields.
Public methods (3)price_rule_get_multi(self, products_by_qty_by_partner)
template_price_get(self, prod_id, qty, partner=None)
template_price_rule_get(self, prod_id, qty, partner=None)
name
Char
related='product_tmpl_id.name'
create(self, vals)
no_create_variants
Selection
default='empty'
help='This selection defines if variants for all attribute combinations are going to be created automatically at saving time.'
required=True
string='Variant creation'
args: [('yes', "Don't create them automatically"), ('no', 'Create them automatically'), ('empty', 'Use the category value')]
action_open_attribute_prices(self)
create(self, vals)
create_variant_ids(self)
name_search(self, name='', args=None, operator='ilike', limit=100)
onchange_no_create_variants(self)
write(self, values)