Solución:
En django 1.7 puedes probar:
1. Delete your migrations folder
2. In the database: DELETE FROM django_migrations WHERE app = 'app_name'.
You could alternatively just truncate this table.
3. python manage.py makemigrations
4. python manage.py migrate --fake
Si está trabajando en django 1.9.5, esta es la solución al 100% para este problema:
1. Delete your migrations folder
2. In the database: DELETE FROM django_migrations WHERE app = 'app_name'.
You could alternatively just truncate this table.
3. python manage.py makemigrations app_name
4. python manage.py migrate
¡Esto funciona al 100% para mí!
No hay una manera fácil de hacer que Django vuelva a crear una tabla que ha eliminado manualmente. Una vez que su base de datos se modifica manualmente, la vista de Django de la base de datos (de las migraciones) es diferente de la realidad, y puede ser difícil de arreglar.
Si ejecuta el comando sqlmigrate, le mostrará el SQL requerido para crear la tabla. Puede ejecutar SQL en un shell de base de datos. Suponiendo que el nombre de su aplicación es students
y la migración que creó la tabla fue 00XX_create_students.py
, tu harías:
./manage.py sqlmigrate students 00XX_create_students
Tenga cuidado si hay claves foráneas hacia o desde la tabla de estudiantes, las restricciones también deberán crearse.
La única forma que funcionó para mí:
rm -r <app-name>/migrations/
python manage.py makemigrations <app-name>
python manage.py sqlmigrate <app-name> 0001_initial
Copie lo que imprime (o, dependiendo de lo que haya eliminado realmente de la base de datos, solo una parte de las consultas SQL).
Aplique esas consultas copiadas a su base de datos:
psql -U user_name -h 127.0.0.1 database_name
Pegue lo que ha copiado de la impresión de consultas SQL.
Confirma las consultas.
Y eso es todo: se crean las tablas que faltan.