Saltar al contenido

Constraints

🐍 ODOO · DESARROLLO · CONSTRAINTS

Constraints en Odoo: SQL vs Python

Restricciones que aseguran la integridad y validez de los datos. Previenen valores nulos no permitidos, duplicados, condiciones lógicas incumplidas. Odoo ofrece dos tipos: SQL (rápido) y Python (lógica compleja).

1Casos de uso típicos

🚫 Campo no nulo
No permitir confirmar factura sin cliente.
🆔 Valor único
No registrar dos usuarios con el mismo correo.
📐 Condición lógica
No agregar valores negativos en campos monetarios.

2SQL constraints

Se definen con _sql_constraints — lista de tripletas: (name, sql_definition, message).

SQL constraint en el modelo ir.cron
💡 EJEMPLO ir.cron
Restricción CHECK sobre el campo interval_number (Ejecutar cada): debe ser mayor a 0. Si pones valor negativo, error inmediato:
Definición SQL del CHECK
Error al violar el constraint

3Python constraints

Para validaciones más complejas que requieren código. Se definen con el decorador @api.constrains(...) sobre un método. Se evalúa al modificar los campos especificados.

Python constraint en res.company validando archivado
💡 EJEMPLO res.company
Cuando cambia el campo active en la compañía, verifica si hay usuarios activos. Si existe al menos uno, genera error indicando cuántos usuarios la usan:
Intento de archivar la compañía
Error de validación con detalle

4Consejos rápidos

⚡ SQL > Python (rendimiento)
Más eficientes — funcionan a nivel de BD. Cuando importa el rendimiento, prefiérelos.
⚠️ Evita operaciones pesadas en Python
Se ejecutan cada vez que se actualiza el campo o se crea registro.
💡 Mensajes claros
Indica el error explícitamente — el constraint bloquea la operación, así que el usuario debe entender qué pasa.

📌 En resumen

Los constraints son la red de seguridad de tus modelos. SQL para reglas simples y rápidas; Python para lógica compleja. Bien usados, garantizan integridad de datos sin agregar bugs sutiles.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

¿Te gustaría implementar Odoo en tu empresa?

12 años de experiencia · +60 implementaciones exitosas · Partner Gold de Odoo en México

Hablemos por WhatsApp