Hola,
Quiero
aplicar un filtro al campo m2o "product_id" del modelo
"sale.order.line", para que los resultados a mostrar varíen
en función de los valores de 2 campos: "tipo_coste", que
es un campo tipo selection del modelo 'sale.order.line', y "mo_ok",
que es un booleano del modelo 'product.template'.
la idea
sería tener dos tipos de resultados, unos en el que
tipo_coste = 'a'
y otros para:
mo_ok = True
Lo he intentado usando el atributo domain en python, pero no se como hacer la llamada a los campos de diferentes clases ni la manera de conseguir dos tipos de resultados en el mismo dominio
product_id=fields.Many2one('product.product', domain = [('')])
Luego he estado intentándolo a traves de un metodo onchange, pero creo que el ejemplo del que me estoy fijando no lo estoy adaptando del todo bién:
@api.one
@api.onchange('tipo_coste')
def _condicionar_tipo_producto(self):
domain = {}
product_list = []
if self.prueba_log_tipo_coste == True:###filtrar si tipo_coste es mo_ok
product_obj = self.env['product.product'].search([('product_tmpl_id.mo_ok','=',True)])
for product_ids in product_obj:
product_list.append(product_ids.id)
domain = {'product_id':[('id','=','product_list')]}
return {'domain' : domain}
else:
product_obj = self.env['product.product'].search([('product_tmpl_id.mo_ok','=',False)])
for product_ids in product_obj:
product_list.append(product_ids.id)
domain = {'product_id':[('id','=','product_list')]}
return {'domain' : domain}...
...
@api.onchange('tipo_coste')
def _condicionar_tipo_producto(self):
domain = {}
if self.tipo_coste == 'c' or self.tipo_coste == 'd' or self.tipo_coste == 'e':
domain = {'product_id':[('product_tmpl_id.mo_ok','=',True)]}
return {'domain' : domain}
else:
domain = {'product_id':[('product_tmpl_id.mo_ok','=',False)]}
return {'domain' : domain}<field name="product_id" domain="[('product_id_computed', '=', tipo_coste)]"/>class product_template(models.Model):
_inherit = ['product.template']
product_id_computed = fields.Boolean(compute='compute_auxiliar', search='search_mo_ok')
def compute_auxiliar(self):
return True
def search_mo_ok(self, operator, value):
tipo_coste = value
if tipo_coste == 'c' or tipo_coste == 'd' or tipo_coste == 'e':
product_id_domain = [('product_tmpl_id.mo_ok', '=', True)]
else:
product_id_domain = [('product_tmpl_id.mo_ok', '=', False)]
return product_id_domain<field name="tipo_coste" invisible="1"/>