Anduvimos buscado por distintos espacios para regalarte la respuesta a tu duda, si continúas con preguntas deja un comentario y te responderemos con gusto.
Solución:
- En la base de datos MySQL eliminar fila
'profiles'
de la mesa'django_migrations'
. - Elimine todos los archivos de migración en la carpeta de migraciones.
- Intentar otra vez
python manage.py makemigrations
ypython manage.py migrate
mando.
Soy un novato de Django y estaba pasando por el mismo problema. Estas respuestas no me funcionaron. Quería compartir cómo solucioné el problema, probablemente le ahorraría mucho tiempo a alguien.
Situación:
Realizo cambios en un modelo y quiero aplicar estos cambios a la base de datos.
Lo que hice:
Ejecutar en shell:
python manage.py makemigrations app-name
python manage.py migrate app-name
Qué pasó:
-
No se realizan cambios en la base de datos.
-
Pero cuando reviso el esquema db, sigue siendo el anterior
Razón:
- Cuando ejecuto python
manage.py migrate app-name
Django comprueba la tabla django_migrations en la base de datos para ver qué migraciones ya se han aplicado y omitirá esas migraciones.
Lo que probé:
Elimine el registro con app=”my-app-name” de esa tabla (delete from django_migrations where app = "app-name"
). Limpiar mi carpeta de migración y ejecutar python manage.py makemigration my-app-name
luego python manage.py migrate my-app-name
. Esto fue sugerido por la respuesta más votada. Pero eso tampoco funciona.
¿Por qué?
Debido a que había una tabla existente, y lo que estoy creando fue una “migración inicial”, Django decide que la migración inicial ya se aplicó (porque ve que la tabla ya existe). El problema es que la tabla existente tiene un esquema diferente.
Solución 1:
Descarte la tabla existente (con el esquema anterior), realice las migraciones iniciales y vuelva a aplicarla. Esto funcionará (funcionó para mí) ya que tenemos una “migración inicial” y no había una tabla con el mismo nombre en nuestra base de datos. (Consejo: usé python manage.py migrate my-app-name zero
para soltar rápidamente las tablas en la base de datos)
¿Problema? Es posible que desee mantener los datos en la tabla existente. No desea dejarlos caer y perder todos los datos.
Solución 2:
-
Elimine todas las migraciones en su aplicación y en django_migrations todos los campos con django_migrations.app = your-app-name Cómo hacer esto depende de qué base de datos esté usando Ejemplo para MySQL:
delete from django_migrations where app = "your-app-name";
-
Cree una migración inicial con el mismo esquema que la tabla existente, con estos pasos:
-
Modifique su models.py para que coincida con la tabla actual en su base de datos
-
Eliminar todos los archivos en “migraciones”
-
Correr
python manage.py makemigrations your-app-name
-
Si ya tiene una base de datos existente, ejecute
python manage.py migrate --fake-initial
y luego siga el paso a continuación.
-
-
Modifique su models.py para que coincida con el nuevo esquema (es decir, el esquema que necesita ahora)
-
Realice una nueva migración ejecutando
python manage.py makemigrations your-app-name
-
Correr
python manage.py migrate your-app-name
Esto funciona para mí. Y logré mantener los datos existentes.
Más pensamientos:
La razón por la que pasé por todos esos problemas fue porque eliminé los archivos en some-app/migrations/ (los archivos de migraciones). Y por lo tanto, esos archivos de migración y mi base de datos no son consistentes entre sí. Así que intentaría no modificar esos archivos de migración a menos que realmente sepa lo que estoy haciendo.
Parece que su migración inicial fue falsificada porque la tabla ya existía (probablemente con un esquema obsoleto):
https://docs.djangoproject.com/en/1.7/topics/migrations/#agregar-migraciones-a-las-aplicaciones
“Esto hará una nueva migración inicial para su aplicación. Ahora, cuando ejecute la migración, Django detectará que tienes una migración inicial y que las tablas que quiere crear ya existen, y marcará la migración como ya aplicada.”
De lo contrario, obtendría un error de tabla sin tal 🙂
[edit] ¿Limpiaste la tabla de migraciones aplicadas? Esa también es una causa común de migraciones no aplicadas.