Hi,
For creating dynamic domain , please check the below code.
class SaleOrder(models.Model):
_inherit = 'sale.order'
sale_order_cashback = fields.Boolean(string="Cashback order")
cashback_products = fields.Json()
@api.onchange('sale_order_cashback')
def _onchange_sale_order_cashback(self):
query = """
SELECT pp.id
FROM product_product pp
INNER JOIN product_template pt ON pp.product_tmpl_id = pt.id
WHERE pt.sale_ok = true
"""
if self.sale_order_cashback:
query += " AND pt.available_for_cashback = true"
self.env.cr.execute(query)
product_ids = [row[0] for row in self.env.cr.fetchall()]
self.cashback_products = product_ids
XML
<record id="sale_order_form" model="ir.ui.view">
<field name="name">sale.view.order.form.inherit</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='order_line']//tree//field[@name='product_id']"
position="attributes">
<attribute name="domain">[('id', 'in', parent.cashback_products)]</attribute>
</xpath>
</field>
</record>
Hope it helps