Día 11: Campos Onchange vs. Campos Calculados — La Mejor Práctica de Odoo
¡Llegamos al Día 11 y con él, a uno de los debates más frecuentes en la comunidad de desarrolladores Odoo!
Hemos visto los campos calculados (compute) que se ejecutan al guardar (o bajo demanda), pero a menudo necesitamos una respuesta instantánea en la interfaz de usuario. Aquí es donde entra en juego el método onchange.
¿Qué hemos añadido en el Día 11?
Hemos implementado un ejemplo de onchange para demostrar cómo, al cambiar el valor de un campo, podemos modificar otros campos en tiempo real en el formulario, antes de que el usuario haga clic en el botón de Guardar.
Los componentes clave que hemos cubierto son:
1. El Propósito del Método onchange
El decorador @api.onchange(‘campo_origen’) se utiliza para ejecutar código Python tan pronto como el usuario modifica el campo especificado. Su principal ventaja es que mejora la experiencia de usuario al validar datos o pre-rellenar información de manera inmediata.
2. Implementación y Estructura
El método onchange trabaja con los valores transitorios del formulario. A diferencia de compute, generalmente se enfoca en el registro actual y modifica otros campos sin necesidad de un write o create en la base de datos.
3. La Regla de Oro: Compute Primero
Aquí reside la lección más importante:
- Para cálculos de valor o estado (ej. Total, Edad, Estatus): Usa @api.depends (Día 10). El cálculo es más eficiente, se almacena correctamente si es necesario y está ligado al modelo, no a la interfaz.
- Para interacciones de interfaz (ej. cambiar un dominio, mostrar una advertencia o warning en el formulario): Usa @api.onchange.
Muchos desarrolladores principiantes usan onchange para cálculos simples, lo cual crea código menos mantenible y puede causar problemas si se intenta interactuar con el modelo a través de API o RPC, donde el onchange no se ejecuta.
Explicación Detallada en Vídeo
En el siguiente vídeo, te muestro ambos ejemplos y te doy las razones de rendimiento y mantenimiento para preferir los campos calculados para la lógica de negocio.
Código Fuente en GitLab
Puedes consultar el código fuente completo de esta lección, con la implementación de onchange y los comentarios sobre su uso, directamente en nuestro repositorio.
➡️ Ver el Código en GitLab: https://github.com/angelmoya/calendario-adviento-curso-tecnico-odoo-19/tree/5b15b6c075747934b5a54271253d4e282479b4b7
Conecta Conmigo y Sigue Aprendiendo
¡Ya puedes decidir la mejor herramienta para cada tarea de lógica! Mañana seguimos automatizando con los campos related.
- LinkedIn: Conecta conmigo en LinkedIn
- YouTube: ¡No olvides suscribirte al canal para no perderte ninguna lección! http://www.youtube.com/@AngelMoya-Odoo