django 1.7 migrations-comment effacer toutes les migrations et recommencer à zéro?

donc je répète rapidement sur une application django en ce moment et je m'ajuste constamment models.py. Au cours d'une journée ou deux de programmation et de test, je génère quelques douzaines de fichiers de migration. Parfois, je déchire vraiment le schéma et je le refais complètement. Cela amène le processus de migration à se plaindre beaucoup des valeurs par défaut et nulles et ainsi de suite. Si possible, je voudrais juste gratter tous les trucs de migration et recommencer les migrations maintenant que je sais enfin ce que je fais. Ma démarche a été la suivante:

  1. supprimez tout dans le dossier migrations sauf __init__.py.
  2. chute dans mon PostgreSQL console et de faire: DELETE FROM south_migrationhistory WHERE app_name='my_app';
  3. lorsque vous êtes à la console PostgreSQL, supprimez toutes les tables associées à my_app.
  4. re-run ./manage.py makemigrations my_app - cela génère un 0001_initial.py fichier dans mon dossier migrations.
  5. exécuter ./manage migrate my_app - Je m'attends à ce que cette commande reconstruise toutes mes tables, mais à la place il dit: "Pas de migrations à appliquer."

Ce qui donne?

,south_migrationhistory la table de la base de données est toujours en jeu maintenant que j'ai quitté le Sud et que je suis passé à Django 1.7?

Merci.

39
demandé sur jononomo 2014-10-09 20:12:37

2 réponses

donc le plan par étapes que j'ai décrit dans ma question fonctionne, mais au lieu de supprimer des lignes de south_migrationhistory table de base de données, j'ai dû supprimer des lignes de la django_migrations table de base de données.

La commande est: DELETE FROM django_migrations WHERE app='my_app'

une fois cela fait, vous pourrez relancer vos migrations à partir de zéro.

34
répondu jononomo 2015-04-16 06:30:24

je voulais juste mettre toutes les étapes dans un format de la commande:

NOTE: Les commandes ci-dessous sont assez destructeur, c'est un moyen de start from scratch comme l'OP demandé.

après un commentaire de mikeb j'ai pensé à ajouter cette ligne:

- VÉRIFIEZ QUELS FICHIERS VOUS SUPPRIMEZ

find . -path *migrations* -name "*.py" -not -path "*__init__*"

puis, ajustez la commande à l'étape 1 pour celui qui fonctionne pour votre dev environnement.

  1. supprimer toutes les migrations de toutes les applications:
find . -path *migrations* -name "*.py" -not -path "*__init__*" -exec rm {} \; # make sure to be in your projects path
  1. recréer l'ensemble de la base de données:
sudo -u postgres bash -c "psql -c \"DROP DATABASE rootedin;\""
sudo -u postgres bash -c "psql -c \"CREATE DATABASE rootedin;\""
sudo -u postgres bash -c "psql -c \"GRANT ALL PRIVILEGES ON DATABASE rootedin to vagrant;\"" # vagrant is my current user
  1. obtenir votre db à jour:
python3 manage.py makemigrations
python3 manage.py migrate
20
répondu mimoralea 2015-06-10 18:00:01