Ya hay preguntas similares para South, pero comencé mi proyecto con Django 1.7 y no estoy usando South.
Durante el desarrollo se han creado muchas migraciones, sin embargo, el software aún no se ha entregado y no existe ninguna base de datos que deba migrar. Por lo tanto, me gustaría restablecer las migraciones como si mi modelo actual fuera el original y volver a crear todas las bases de datos.
¿Cuál es la forma recomendada de hacerlo?
EDITAR: A partir de Django 1.8 hay un nuevo comando llamado squashmigrations que resuelve más o menos el problema descrito aquí.
django
django-migrations
django-1.7
Kit Fisto
fuente
fuente
Respuestas:
Tengo esto. Me acabo de dar cuenta de esto y es bueno.
Primero, para borrar la tabla de migraciones:
Eliminar
app-name/migrations/
carpeta o contenido.Realiza las migraciones:
Finalmente, arregle sus migraciones sin hacer otros cambios en la base de datos:
fuente
zero
. Para el sistema de migraciones Django,<app-name>
ahora es una nueva aplicación ymakemigrations <app-name>
comenzará desde0001
.--fake
evita que las tablas se modifiquen realmente, que las migraciones solo se deben marcar como invertidas y no se deben aplicar al esquema. (Añadiendo pequeñas explicaciones en aras de la integridad, @ tani-rokk, @Fabrizio)manage.py migrate --fake <app-name> zero
para borrar la tabla de migraciones, luego elimine la carpeta <app-name> / migrations / o su contenido. Entoncesmanage.py makemigrations <app-name>
y finalmente hazlomanage.py migrate --fake <app-name>
. Esto pondrá en orden sus migraciones sin realizar otros cambios en la base de datos.En la versión de migraciones de Django 1.7, la funcionalidad de restablecimiento que solía estar en el sur se ha eliminado a favor de una nueva funcionalidad para "aplastar" sus migraciones. Se supone que esta es una buena manera de mantener bajo control el número de migraciones.
https://docs.djangoproject.com/en/dev/topics/migrations/#squashing-migrations
Si aún desea comenzar desde cero, supongo que aún podría vaciar la tabla de migraciones y eliminar las migraciones, después de lo cual volvería a ejecutar
makemigrations
.fuente
raise KeyError("Migration %s dependencies reference nonexistent parent node %r" % (migration, parent))
./manage.py squashmigrations myapp 0004
, aplastará todas las migraciones antes de la migración0004
en su aplicaciónmyapp
. Esto creará una única migración aplastada.Acabo de tener el mismo problema. Aquí está mi solución.
El
find
comando: http://unixhelp.ed.ac.uk/CGI/man-cgi?findfuente
Suponiendo que esta es la estructura de su proyecto,
puede ejecutar el script remove_migrations.py desde el lugar indicado arriba para borrar todos los archivos de migraciones.
Eliminar manualmente puede ser agotador si tiene un proyecto elaborado. Esto me ahorró mucho tiempo. Eliminar archivos de migración es seguro. He hecho esto una enésima cantidad de veces sin enfrentar ningún problema ... todavía.
Sin embargo, cuando eliminé la carpeta de migraciones,
makemigrations
omigrate
no la volví a crear. El script se asegura de que la carpeta de migración con su__init__.py
ubicación permanezca, solo borrando los archivos de migración.fuente
touch migrations/__init__.py
)DELETE FROM django_migrations Where app in ('app1', 'app2');
./manage.py makemigrations
./manage.py migrate --fake
O, puede escribir la migración de todos estos
fuente
./manage.py makemigrations
que funcionaran, así:./manage.py makemigrations orders alerts
Intento diferentes comandos y algunas de las respuestas me ayudan. Solo esta secuencia en mi caso solucionó ambas dependencias rotas en las migraciones en MYAPP y limpió todas las migraciones pasadas comenzando desde cero.
Antes de hacer esto, asegúrese de que la base de datos ya esté sincronizada (por ejemplo, no agregue un nuevo campo Modelo aquí o cambie las opciones de Meta).
Donde 0002 es el número de migración devuelto por el último comando makemigrations.
Ahora puede ejecutar makemigrations / migrate de nuevo normalmente porque la migración 0002 se almacena pero no se refleja en la base de datos ya sincronizada.
fuente
Si no le importan las migraciones anteriores, ¿qué tal simplemente eliminar todas las migraciones en el directorio migrations /? Comenzará la secuencia de migración desde cero, tomando su modelo actual como referencia como si hubiera escrito el modelo completo ahora.
Si no confías en mí para eliminarlos, intenta hacerlo en su lugar.
fuente
Una forma sencilla es
Vaya a todas las aplicaciones y elimine los archivos de migración.
Luego vaya a la tabla django-migrtaions en la base de datos y trunque (elimine todas las entradas).
Después de eso, puede crear migraciones una vez más.
fuente
cd al directorio src
cd /path/to/src
eliminar directorios de migración
rm -rf your_app/migrations/
tenga en cuenta que esto debe hacerse para cada aplicación por separado
emigrar
python3.3 manage.py migrate
si quieres empezar de nuevo
python3.3 manage.py makemigrations your_app
fuente
Si está en modo de desarrollo y solo desea restablecer todo (base de datos, migraciones, etc.), uso este script basado en la respuesta de Abdelhamid Ba. Esto borrará las tablas de la base de datos (Postgres), eliminará todos los archivos de migración, volverá a ejecutar las migraciones y cargará mis accesorios iniciales:
Archivo reset-db.sql:
archivo migration.sh:
archivo load_initial_fixtures.sh:
Solo asegúrese de cambiar las rutas para que correspondan a su aplicación. Yo personalmente tengo estos scripts en una carpeta llamada project_root / script / local, y las fuentes de django están en project_root / src.
fuente
Después de eliminar cada carpeta de "migraciones" en mi aplicación (manualmente), ejecuté:
Entonces pensé que podía hacer
./manage.py makemigrations
para regenerarlos a todos. Sin embargo, no se detectaron cambios. Luego intenté especificar una aplicación a la vez:./manage.py makemigrations foo
,./manage.py makemigrations bar
. Sin embargo, esto dio lugar a dependencias circulares que no se pudieron resolver.Finalmente, ejecuté un solo comando makemigrations que especificaba TODAS mis aplicaciones (sin ningún orden en particular):
Esta vez, funcionó: las dependencias circulares se resolvieron automáticamente (creó archivos de migraciones adicionales cuando fue necesario).
Luego pude correr
./manage.py migrate --fake
y volví al negocio.fuente