Hola amigos, estoy intentando realizar un domain diinamico sobre un campo de a cuerdo a la selección de otr
mi modelo CRM tiene dos campos relacionados a res.partner uno llamado partner_id que es considerado como cliente y otro llamado contact_id
lo que busco es que en contact_id no liste registros si no existe un partner_id seleccionado; sin embargo cuando selecciono un cliente ya puedo retornar un domain para el contact con ayuda del on change,
contact_id = fields.Many2one('res.partner', string='Contact', domain=lambda self: self._default_contact_domain())
def _default_contact_domain(self):
params = self.env.context.get('params', False)
domain = [('id', 'in', [])]# -----> Tuve que usar ese domain para que inicialmente no me muestre valores
if params:
lead_id = params.get('id', False)
if lead_id:
lead = self.browse(lead_id)
if lead.partner_id:
#Vigilar que esta guardando en cache el ultimo id
domain = self._get_contact_domain(lead.partner_id)
return domain
Se ejecuta al cambiar el cliente
def on_change_partner_id(self, cr, uid, ids, partner_id, context=None):
values = {}
contact_domain = [('id', 'in', [])]
if partner_id:
partner = self.pool.get('res.partner').browse(cr, uid, partner_id, context=context)
contact_name = (not partner.is_company and
partner.name) or False
if contact_name:#Contact
contact_name += ' {}'.format(partner.last_name or '')
contact_domain = self._get_contact_domain(partner)
values = {
'partner_name': partner_name,
'contact_name': contact_name,
'street': partner.street,
'street2': partner.street2,
'city': partner.city,
'email_from': partner.email,
'international_lada_phone': partner.international_lada_phone,
'local_lada_phone': partner.local_lada_phone,
'phone': partner.phone,
'ext_phone': partner.ext_phone,
'zip': partner.zip,
}
return {'value': values, 'domain': {'contact_id': contact_domain}}
Noto que mi domain solo se ejecuta una vez al inicio y que si visualizo un registro y me paso a otro en contact_id filtra contactos pero por el cliente del registro pasado, realmente lo que busco es que el dominio sea dinamico y que si no hay cliente no filtre nada y cuando actualice y solo quiera cambiar el contacto de la lista me filtre solo los del cliente en seleccion, gracias