web-dev-qa-db-fra.com

django.db.migrations.exceptions.InconsistentMigrationHistory

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?

17
Hari Krishnan

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.

15
Arpit Solanki

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’.
37
jackson

Voici comment résoudre ce problème correctement.

Suivez ces étapes dans votre dossier de migration dans le projet: 

  1. Supprimez les fichiers _pycache_ et 0001_initial. 
  2. Supprimez db.sqlite3 du répertoire racine (faites attention, toutes vos données disparaîtront).
  3. sur le terminal courir: 
      python manage.py makemigrations
      python manage.py migrer

Voila.

6
Dr. Younes Henni

Problème

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.

Solution

  1. supprimez 'Django.contrib.admin' de INSTALLED_APPS dans settings.py.
  2. exécuter des commandes: 

Python manage.py makemigrations appname

Python manage.py migrate appname

  1. ajoutez 'Django.contrib.admin' à INSTALLED_APPS dans le fichier settings.py.
  2. exécuter à nouveau les commandes: 

$: Python manage.py makemigrations appname

$: Python manage.py migrate appname

1
kun shi

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.

1
hcf1425

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. 

1
Arun

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 

0
hcf1425

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.

0
Erfan Tahriri

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: 

  1. 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)
  2. Jetez toutes vos migrations
  3. Recréer un nouvel ensemble de migrations
  4. Sacrifiez une poule, peut-être deux si vous êtes inquiet; faites également une sauvegarde de votre base de données
  5. Tronquer la table Django_migrations
  6. Fake-applique le nouvel ensemble de migrations
  7. 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!

0
N.C.

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
0
shivam singhal