Crear un dominio dinámico

En el desarrollo con Odoo, a menudo nos encontramos con la necesidad de filtrar dinámicamente los registros disponibles en un campo Many2one basándonos en condiciones específicas o el estado de otros campos en el formulario. Esta funcionalidad es crucial para mejorar la experiencia del usuario y garantizar la integridad de los datos.

Carlos Blanco

9/25/20253 min read

Los dominios dinámicos permiten restringir las opciones disponibles en un campo relacional según criterios específicos, lo que hace que la interfaz sea más intuitiva y evita selecciones incorrectas.

Nuestro ejemplo cubrirá la siguiente necesidad.

Problemática

Odoo cuenta con un modelo llamado términos de pago; se puede seleccionar un término de pago por defecto para cada cliente y, al crear la venta y seleccionarlo, el término de pago se selecciona automáticamente en la venta, estableciendo el que tiene el cliente seleccionado, pero es posible cambiar el término de pago a cualquier otro.

Lo que se realizará es poder agregar términos de pago que serán permitidos seleccionar en la venta, estableciéndolos dentro del cliente, y por cliente se podrán definir diferentes términos de pago para poder ser elegidos en la venta.

Implementación del dominio dinámico

Primero necesitamos definir un campo Many2many dentro de clientes con relación al modelo de términos de pago permitidos (account.payment.term)

Agregamos el campo en la vista formulario de clientes(res.partner).

Agregaremos el dominio en el many2one de término de pago de la venta para que solo pueda seleccionar los términos establecidos por cada cliente.

Para esto, primero crearemos un campo Many2many computado para obtener los valores de los términos de pago permitidos para ese cliente. Este campo será almacenado para que mantenga su valor al momento de seleccionar el cliente.

También agregaremos el campo en la vista formulario de la venta para poder hacer referencia en el domain donde se necesita.

Nota: Por el momento lo dejamos visible para asegurar su correcto funcionamiento.

A continuación, debemos agregar el dominio al término de pago para que solo permita seleccionar los términos de pago permitidos establecidos en el cliente. Cambiando únicamente el atributo de domain del campo payment_term_id

Este sería el resultado; solo podemos ver 3 términos de pago que son los configurados en el cliente.

Para finalizar, ocultamos el campo Término de pagos permitidos en la venta.

La implementación de dominios dinámicos en campos Many2one es una técnica poderosa en Odoo 18 que mejora significativamente la experiencia del usuario al filtrar opciones relevantes según el contexto. A través de los métodos demostrados—uso de funciones onchange, parámetros dinámicos en la definición del campo y expresiones en vistas XML—los desarrolladores pueden crear interfaces más intuitivas y eficientes.

Es importante recordar que los dominios dinámicos no solo mejoran la usabilidad, sino que también contribuyen a la integridad de los datos al evitar selecciones inconsistentes. Al dominar estas técnicas, los desarrolladores de Odoo pueden crear aplicaciones más robustas y adaptadas a las necesidades específicas de cada negocio.

Si tiene dudas, no dude en ponerse en contacto con nosotros a través del correo: info@exdoo.mx

En Exdoo podemos desarrollar cualquier módulo para Odoo en México, implementamos tu ERP con consultores experimentados no solo en Odoo, sino en procesos de negocios; tenemos 10 años trabajando solamente con Odoo en México y otros países.