Si no le importan los datos:
La mejor manera sería eliminar la base de datos y ejecutarla syncdbnuevamente. O puedes ejecutar:
Para Django> = 1.5
python manage.py flush
Para Django <1.5
python manage.py reset appname
(puede agregar --no-inputal final del comando para que se salte el indicador interactivo).
Si te preocupan los datos:
De los documentos:
syncdb solo creará tablas para modelos que aún no se hayan instalado. Nunca emitirá declaraciones ALTER TABLE para que coincida con los cambios realizados en una clase de modelo después de la instalación. Los cambios en las clases de modelo y los esquemas de la base de datos a menudo implican alguna forma de ambigüedad y, en esos casos, Django tendría que adivinar los cambios correctos para realizar. Existe el riesgo de que se pierdan datos críticos en el proceso.
Si ha realizado cambios en un modelo y desea modificar las tablas de la base de datos para que coincidan, use el comando sql para mostrar la nueva estructura SQL y compárela con su esquema de tabla existente para resolver los cambios.
https://docs.djangoproject.com/en/dev/ref/django-admin/
Referencia: Preguntas frecuentes: https://docs.djangoproject.com/en/dev/faq/models/#if-i-make-changes-to-a-model-how-do-i-update-the-database
La gente también recomienda South ( http://south.aeracode.org/docs/about.html#key-features ), pero no lo he probado.
flush. intente usarpython manage.py flushopython manage.py flush --noinputpara omitir el mensaje interactivo.django-admin flushacuerdo con los documentosUsando extensiones de Django , ejecutando:
Limpiará las tablas de la base de datos y luego ejecutará:
Los recreará (el sur puede pedirle que migre cosas).
fuente
Creo que los documentos de Django mencionan explícitamente que si la intención es comenzar desde una base de datos vacía nuevamente (que parece ser la intención de OP), simplemente suelte y vuelva a crear la base de datos y vuelva a ejecutar
migrate(en lugar de usarflush):Entonces, para el caso de OP, solo necesitamos:
python manage.py migratefuente
Más rápido (elimina y crea todas las tablas, incluidos los datos):
./manage.py reset appname | ./manage.py dbshellPrecaución:
fuente
resetya ejecuta SQL, por lo que no es necesario realizar una canalizacióndbshell. Si usa elsqlresetcomando, entonces solo imprimirá el SQL, que podría canalizar al shell para su ejecución, pero es un paso innecesario.Puede usar la biblioteca Django-Truncate para eliminar todos los datos de una tabla sin destruir la estructura de la tabla.
Ejemplo:
settings.pyarchivo:INSTALLED_APPS = [ ... 'django_truncate', ]fuente