Gracias a las respuestas de Dominique Guardiola y las placas, me ayudó a resolver un problema difícil. Sin embargo, hay un par de problemas con la solución, aquí está mi opinión al respecto.
Usar nomanage.py reset south
es una buena idea si tiene aplicaciones de terceros que usan South, por ejemplo django-cms
(básicamente todo usa South).
reset south
eliminará todo el historial de migración de todas las aplicaciones que haya instalado.
Ahora considere que actualiza a la última versión de django-cms
, contendrá nuevas migraciones como 0009_do_something.py
. South seguramente se confundirá cuando intente ejecutar esa migración sin tener que 0001
pasar 0008
por el historial de migración.
Es mucho mejor / más seguro reiniciar selectivamente solo las aplicaciones que está manteniendo .
En primer lugar, asegúrese de que sus aplicaciones no tengan desincronización entre las migraciones en el disco y las migraciones que se han ejecutado en la base de datos. De lo contrario habrá dolor de cabeza.
1. Eliminar el historial de migración de mis aplicaciones
sql> delete from south_migrationhistory where app_name = 'my_app';
2. Eliminar migraciones para mis aplicaciones
$ rm -rf my_app/migrations/
3. Crear nuevas migraciones iniciales para mis aplicaciones
$ ./manage.py schemamigration --initial my_app
4. Falso ejecutar las migraciones iniciales para mis aplicaciones
Esto inserta las migraciones south_migrationhistory
sin tocar las tablas reales:
$ ./manage.py migrate --fake my_app
Los pasos 3 y 4 en realidad son solo una variante más larga de manage.py convert_to_south my_app
, pero prefiero ese control adicional, en una situación tan delicada como la modificación de la base de datos de producción.
__init__.py
aappname/migrations
./manage.py makemigrations
pero sucederán cosas malas si no comienza desde una nueva base de datos ...squashmigrations
es la respuesta correcta