Cómo crear un dominio dinámico en Odoo
Los dominios dinámicos permiten restringir las opciones disponibles en un campo relacional según el contexto. Hacen la interfaz más intuitiva, evitan selecciones incorrectas y mantienen la integridad de los datos. En este tutorial: caso práctico de términos de pago permitidos por cliente.
1
La problemática
Odoo permite seleccionar un término de pago por defecto para cada cliente. Al crear una venta y elegir al cliente, el término se selecciona automáticamente — pero el usuario puede cambiarlo a cualquier otro.
2
Many2many de términos permitidos en el cliente
Primero definimos un campo Many2many dentro del modelo res.partner con relación al modelo account.payment.term:

Y agregamos el campo en la vista formulario del cliente:


3
Many2many computado en la venta
Para que la venta pueda usar esa lista en el dominio del campo de término de pago, creamos un Many2many computado y almacenado que copia los valores del cliente seleccionado:

store=True para que persista en la BD. Esto permite usarlo en dominios estáticos en XML — sin almacenar, el cliente web no podría resolverlo en el momento de renderizar el filtro.
4
Mostrar el campo en la vista (temporalmente)
Agregamos el campo en la vista formulario de la venta. Por ahora lo dejamos visible para confirmar que funciona — más adelante lo ocultaremos:

5
Aplicar el dominio dinámico al campo de la venta
Modificamos el atributo domain del campo payment_term_id en la vista para que solo muestre los términos permitidos del cliente seleccionado:

El resultado: ahora solo aparecen los 3 términos de pago configurados en el cliente, no toda la lista global:

6
Ocultar el campo auxiliar
Confirmado el funcionamiento, ocultamos el campo Many2many auxiliar en la vista (lo necesitamos para el dominio pero no para que el usuario lo vea):


🎯 Beneficios del dominio dinámico
📌 En resumen
Los dominios dinámicos en campos Many2one son una técnica poderosa que mejora la experiencia del usuario al filtrar opciones relevantes según el contexto. La técnica del Many2many computado almacenado es elegante: copia la lista permitida desde el modelo padre y permite usarla como filtro en la vista.
No solo mejoran la usabilidad — también contribuyen a la integridad de los datos al evitar selecciones inconsistentes. En Exdoo aplicamos este patrón en módulos donde las reglas de negocio requieren validaciones contextuales (precios autorizados, almacenes permitidos, listas de productos por cliente). Si tienes dudas, escríbenos a info@exdoo.mx.
Deja un comentario