Migraciones en Django: makemigrations y migrate resuelve un problema frecuente en proyectos Python: Versiona la evolución del esquema junto con los modelos y aplica la misma secuencia en cada entorno. Esta guía explica el mecanismo, presenta un ejemplo ejecutable y marca los límites que evitan una implementación frágil.

Concepto y caso de uso

makemigrations compara modelos con el historial de archivos; migrate aplica operaciones según su grafo de dependencias.

Para repasar los fundamentos relacionados, consulta también la guía de Django. La integración es más simple cuando cada función recibe dependencias y datos explícitamente en lugar de depender de estado global.

Ejemplo práctico

python manage.py makemigrations billing --name add_invoice_status
python manage.py sqlmigrate billing 0007
python manage.py migrate --plan
python manage.py migrate
python manage.py showmigrations billing

Revisa archivo y SQL, prueba con datos representativos y divide cambios incompatibles en etapas toleradas por versiones antiguas y nuevas.

Decisiones importantes

La elección correcta depende del contrato público, del volumen y del comportamiento ante fallos.

Considera concurrencia, entradas vacías y fallos parciales. Documenta cada límite que afecte a consumidores y usa nombres que expresen intención.

Errores frecuentes

El ejemplo mínimo no sustituye límites, manejo de errores y observabilidad. No edites tablas manualmente ni generes migraciones por separado en producción. Los defaults que reescriben tablas grandes requieren planificación.

Evita capturar excepciones sin contexto o devolver resultados parciales como si fueran completos. Un fallo explícito suele ser más seguro que datos silenciosamente incorrectos.

Cómo validar

Valida el comportamiento y no solo el camino feliz. Ejecuta migrate --plan, aplica en staging, prueba reversión cuando exista y confirma con showmigrations.

La documentación oficial, consultada el 28 de julio de 2026, detalla la API y debe ser la referencia para cambios futuros.