OCA/product-attribute · 18.0
Product Attribute Value Dependent Mixin
product_attribute_value_dependent_mixin
Product Attribute Value Dependent Mixin
This technical module introduces a reusable mixin designed to enable any model to establish dependencies on specific product attribute values. By inheriting from this mixin, developers can easily link business rules, configurations, or records to precise product variants without duplicating complex filtering logic.
Table of contents
Usage
Fields
The mixin exposes the following fields:
product_tmpl_id: the product template to filter on (optional).product_id: a specific product variant (optional).attribute_value_ids: a set of attribute values to filter on (optional).available_product_domain: a computed domain to restrict the selection ofproduct_idin views, based onproduct_tmpl_id.available_attribute_value_domain: a computed domain to restrict the selection ofattribute_value_idsin views, based onproduct_tmpl_id.
Inheriting the Mixin
To use this mixin, inherit from attribute.value.dependent.mixin in
your model alongside your base model:
from odoo import fields, models
class MyModel(models.Model):
_name = "my.model"
_inherit = ["my.model", "attribute.value.dependent.mixin"]
All fields from the mixin (product_tmpl_id, product_id,
attribute_value_ids, available_product_domain,
available_attribute_value_domain) are automatically available on your
model.
Using the Domain Fields in a Form View
The computed domain fields must be referenced in the domain attribute
of the corresponding fields in the view. Odoo 18.0 automatically loads
fields referenced in domain attributes, so no additional declaration
is needed.
<record id="view_my_model_form" model="ir.ui.view">
<field name="name">my.model.form</field>
<field name="model">my.model</field>
<field name="arch" type="xml">
<form>
<group>
<field name="product_tmpl_id"/>
<field name="product_id"
domain="available_product_domain"
context="{'default_product_tmpl_id': product_tmpl_id}"/>
<field name="attribute_value_ids"
domain="available_attribute_value_domain"
widget="many2many_tags"/>
</group>
</form>
</field>
</record>
Matching Logic
The is_matching_product(product) method validates whether a given
product variant satisfies the configured constraints. All fields are
optional and act as independent filters combined with AND logic:
- If
product_idis set, it is the most restrictive criterion: the method returnsTrueonly if the given product is exactly that variant, regardless of other fields. - If
product_tmpl_idis set, the given product must belong to that template. - If
attribute_value_idsis set, the given product must match the configured attribute values with the following logic:- Values belonging to the same attribute are combined with OR (e.g. size S or M).
- Values belonging to different attributes are combined with AND (e.g. size S or M and color Red).
- Since an attribute value can exist across multiple templates,
product_tmpl_idandattribute_value_idsshould be used together to avoid unintended matches across templates.
- If no field is set, the method returns
Truefor any product (no constraint).
Using is_matching_product
The is_matching_product(product) method can be called from Python code
to check whether a given product.product record satisfies the
constraints defined on a mixin record:
for rule in self.env["my.model"].search([]):
if rule.is_matching_product(product):
# apply rule
Bug Tracker
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed feedback.
Do not contact contributors directly about support or help with technical issues.
Credits
Authors
- Akretion
Contributors
- Akretion
- Chafique Delli <<chafique.delli@akretion.com>>
- Guillaume Masson <<guillaume.masson@akretion.com>>
Maintainers
This module is maintained by the OCA.
OCA, or the Odoo Community Association, is a nonprofit organization whose mission is to support the collaborative development of Odoo features and promote its widespread use.
This module is part of the OCA/product-attribute project on GitHub.
You are welcome to contribute. To learn how please visit <https://odoo-community.org/page/Contribute>.





