J'essaie de refactoriser un projet Django. J'ai renommé quelques applications et en ai ajouté une nouvelle, en plus de mélanger quelques modèles. Je souhaite effacer ma base de données et mes migrations et recommencer à zéro, mais je ne sais pas comment y parvenir. Voici ce que j'ai fait:
rm -r myapp/migrations // I ran this for all my apps
python manage.py flush
python manage.py makemigrations myapp // I ran this for all my apps
python manage.py migrate // This errors
Je reçois une erreur:
Django.db.utils.OperationalError: table "myapp_mymodel" already exists
Quelqu'un peut-il me dire ce que je peux faire de mal?
EDIT: Quelle est la commande Django pour supprimer toutes les tables? n'a pas marché.
Supprimez la base de données et supprimez les fichiers de migration (.py
et .pyc
) dans le répertoire migrations
de votre application (ne supprimez pas le fichier __init__.py
). Puis exécutez python manage.py makemigrations app
et python manage.py migrate
.
J'ai eu le même problème, avec Django 1.10, voici ce que j'ai fait, j'ai supprimé le fichier sqlite de la base de données, supprimé les dossiers pycache de chacune des applications, supprimé tous les fichiers du dossier de migration de chaque application, à l'exception du init . py, puis a exécuté python manage.py makemigrations
et python manage.py migrate
. Notez également que, comme vous avez supprimé la base de données, vous devrez créer un nouveau superutilisateur à l'aide de python manage.py createsuperuser
. J'espère que cela t'aides
Pour moi, juste
python manage.py flush
ancien contenu de la base de données supprimé, j'ai donc pu créer de nouveaux enregistrements dans Django 2.1.4.
N'oubliez pas de créer un nouveau superutilisateur:
python manage.py createsuperuser
Ne supprimez pas votre fichier de base de données!
Il est correct de supprimer les fichiers de migration, puis d'exécuter le vidage, mais la suppression du fichier de base de données SQLite est erronée. Cela a fonctionné pour moi à chaque fois. Si vous utilisez une autre base de données, cela vous évitera beaucoup de travail et de préparation.