Día 13: Constraints SQL y Python — Asegurando la Integridad de Datos en Odoo
¡Ya estamos a un día de la mitad del reto! Si en el Día 12 aprendimos a impulsar el workflow con botones, hoy vemos el mecanismo de frenado: las Constraints.
En cualquier sistema ERP, la integridad de los datos no es opcional. Debemos asegurarnos de que los valores introducidos sean correctos, únicos y cumplan con las reglas de negocio. En Odoo V19, tenemos dos herramientas principales para lograr esto: las Constraints de SQL y las de Python.
¿Qué hemos cubierto en el Día 13?
Hemos implementado un ejemplo de cada tipo de constraint para entender su propósito y su alcance (base de datos vs. lógica de negocio).
Los componentes clave que hemos cubierto son:
1. Constraints a Nivel de Base de Datos (_sql_constraints)
Se utilizan para reglas sencillas pero críticas que deben cumplirse en el motor PostgreSQL. El caso de uso más común es la Unicidad.
- Sintaxis: Se define como una lista de tuplas donde se especifica el nombre de la constraint, el tipo (UNIQUE, CHECK), y el mensaje de error.
- Ventaja: Son muy rápidas y se activan incluso si el registro se intenta manipular fuera de Odoo (ej. vía API o directamente en SQL).
2. Constraints de Lógica de Negocio (Python)
Se utilizan para validaciones más complejas, que necesitan lógica Python o comparar múltiples campos.
- Decorador: Usamos el decorador @api.constrains listando los campos que, si son modificados, dispararán la validación.
- Lanzamiento de Error: La validación se realiza en un método Python que lanza una excepción (ValidationError) si la condición no se cumple (ej. si la fecha de finalización es anterior a la fecha de inicio).
La Diferencia Fundamental
Elegir correctamente es clave: si la regla es simple (como unicidad), usa SQL. Si necesitas lógica de negocio, condiciones o comparaciones, usa Python.
Explicación Detallada en Vídeo
En el siguiente vídeo, te muestro ambos ejemplos, te explico la sintaxis exacta de _sql_constraints y la estructura del método @api.constrains, incluyendo cómo lanzar mensajes de error amigables para el usuario.
Código Fuente en GitLab
Puedes consultar el código fuente completo de esta lección, con la implementación de ambos tipos de constraints, directamente en nuestro repositorio.
➡️ Ver el Código en GitLab: https://github.com/angelmoya/calendario-adviento-curso-tecnico-odoo-19/tree/7072ed5dae481eafb43c46c8de1e51e1f2d3c918
Conecta Conmigo y Sigue Aprendiendo
¡Ya puedes asegurar la calidad de tu base de datos! Mañana nos relajamos un poco con los campos relacionados.
- LinkedIn: Conecta conmigo en LinkedIn
- YouTube: ¡No olvides suscribirte al canal para no perderte ninguna lección! http://www.youtube.com/@AngelMoya-Odoo