Quand je cours
python manage.py migrate
sur mon projet Django, j'obtiens l'erreur suivante
Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/home/hari/project/env/local/lib/python2.7/site- packages/Django/core/management/__init__.py", line 363, in execute_from_command_line
utility.execute()
File "/home/hari/project/env/local/lib/python2.7/site-packages/Django/core/management/__init__.py", line 355, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/hari/project/env/local/lib/python2.7/site-packages/Django/core/management/base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/Django/core/management/base.py", line 330, in execute
output = self.handle(*args, **options)
File "/home/hari/project/env/local/lib/python2.7/site-packages/Django/core/management/commands/migrate.py", line 86, in handle
executor.loader.check_consistent_history(connection)
File "/home/hari/project/env/local/lib/python2.7/site-packages/Django/db/migrations/loader.py", line 298, in check_consistent_history
connection.alias,
Django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency account.0001_initial on database 'default'.
J'ai un modèle d'utilisateur comme ci-dessous
class User(AbstractUser):
place = models.CharField(max_length=64, null=True, blank=True)
address = models.CharField(max_length=128, null=True, blank=True)
Alors, comment puis-je résoudre ce problème?
Votre table Django_migrations dans votre base de données est source d'incohérence et la suppression de toutes les migrations juste du chemin local ne fonctionnera pas.
Vous devez tronquer la table Django_migrations de votre base de données puis essayez à nouveau d'appliquer les migrations. Cela devrait fonctionner, mais s'il ne l'exécute pas, relancez makemigrations puis migrez.
Remarque: n'oubliez pas de faire une sauvegarde de vos données.
Puisque vous utilisez un modèle d’utilisateur personnalisé, vous pouvez d’abord commenter.
INSTALLED_APPS = [
...
#‘Django.contrib.admin’,
...
]
dans vos paramètres Installed_Apps. Puis courir
python manage.py migrate.
Une fois terminé, commentez
‘Django.contrib.admin’.
Voici comment résoudre ce problème correctement.
Suivez ces étapes dans votre dossier de migration dans le projet:
Voila.
Django.db.migrations.exceptions.InconsistentMigrationHistory: La migration admin.0001_initial est appliquée avant son compte de dépendance.0001_initial sur la base de données 'default'.
Nous pouvons donc migrer la base de données sans admin (admin.0001_initial) en premier lieu.
Une fois sa dépendance migrée, exécutez les commandes pour migrer admin.0001_initial
.
Python manage.py makemigrations appname
Python manage.py migrate appname
$: Python manage.py makemigrations appname
$: Python manage.py migrate appname
lorsque vous créez un nouveau projet Django et exécutez
python manage.py migrer
Django créera 10 tables pour vous par défaut, dont une table auth_user et deux commençant par auth_user.
lorsque vous souhaitez créer un modèle utilisateur personnalisé hérité de AbstractUser, vous rencontrerez ce problème avec le message d'erreur suivant:
Django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency account.0001_initial on database 'default'.
Je résous ce problème en supprimant toute ma base de données et en crée une nouvelle. Et cela a remplacé les trois tableaux que j'ai mentionnés.
il suffit de supprimer le fichier sqlite ou d'exécuter le vidage de la base de données 'python manage.py flush' puis d'exécuter makemigrations et les commandes migrate respectivement.
lorsque vous créez un nouveau projet et sans application, vous exécutez le
python manage.py migrate
django créera 10 tables par défaut.
Si vous souhaitez créer un modèle d'utilisateur client qui héritera de AbstractUser
après cela, vous rencontrerez ce problème comme suit:
Django.db.migrations.exceptions.InconsistentMigrationHistory: La migration admin.0001_initial est appliquée avant sa dépendance account.0001_initial sur la base de données 'default'.
enfin, je laisse tomber toutes mes bases de données et lance
Si vous définissez AUTH_USER_MODE L dans settings.py comme ceci:
AUTH_USER_MODEL = 'custom_user_app_name.User'
vous devriez commenter cette ligne avant d'exécuter makemigration et migrate commandes. Ensuite, vous pouvez à nouveau décommenter cette ligne.
Si cette exception a été révélée pendant que vous essayez de créer votre propre modèle utilisateur au lieu du modèle standard, suivez cette instruction instruction
J'ai trouvé mon problème résolu en suivant cette instruction étape par étape:
- Créez un modèle utilisateur personnalisé identique à auth.User, appelez-le utilisateur (afin que les tables plusieurs à plusieurs conservent le même nom) et définissez db_table = 'auth_user'. (donc il utilise la même table)
- Jetez toutes vos migrations
- Recréer un nouvel ensemble de migrations
- Sacrifiez une poule, peut-être deux si vous êtes inquiet; faites également une sauvegarde de votre base de données
- Tronquer la table Django_migrations
- Fake-applique le nouvel ensemble de migrations
- Supprimez db_table, apportez d'autres modifications au modèle personnalisé, générez des migrations, appliquez-les
Il est fortement recommandé de le faire sur une base de données qui applique contraintes de clé étrangère. N'essayez pas ceci sur SQLite sur votre ordinateur portable et attendez-vous à ce que Postgres fonctionne sur les serveurs!
Commencez par supprimer toutes les migrations et les fichiers db.sqlite3, puis procédez comme suit:
$ ./manage.py makemigrations myapp
$ ./manage.py squashmigrations myapp 0001(may be differ)
Supprimez l'ancien fichier de migration et enfin.
$ ./manage.py migrate