web-dev-qa-db-fra.com

Erreur de migration Django KeyError: ('list', u'user ')

J'essaye de courir

python manage.py migrate

ou

python manage.py makemigrations

J'ai eu cette erreur:

Running migrations:
  No migrations to apply.
Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/core/management/__init__.py", line 353, in execute_from_command_line
    utility.execute()
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/core/management/__init__.py", line 345, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/core/management/base.py", line 348, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/core/management/base.py", line 399, in execute
    output = self.handle(*args, **options)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/core/management/commands/migrate.py", line 183, in handle
    executor.loader.project_state(),
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/db/migrations/loader.py", line 338, in project_state
    return self.graph.make_state(nodes=nodes, at_end=at_end, real_apps=list(self.unmigrated_apps))
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/db/migrations/graph.py", line 280, in make_state
    project_state = self.nodes[node].mutate_state(project_state, preserve=False)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/db/migrations/migration.py", line 88, in mutate_state
    operation.state_forwards(self.app_label, new_state)
  File "/Users/rostunov/temp/venv/lib/python2.7/site-packages/Django/db/migrations/operations/models.py", line 547, in state_forwards
    model_state = state.models[app_label, self.name_lower]
KeyError: ('list', u'user')

Cela se produit après avoir extrait une autre version de mon application du git.

Je n'ai pas cette erreur avec le même code sur une autre machine. J'ai essayé d'utiliser --fake avec zero ou de squashmigrations à précédent mais cela n'aide pas non plus.

Impossible de savoir comment le résoudre.

10
Roberto

Le problème était dans les fichiers de migration. Alors que je faisais une validation dans git, j’ai effacé l’un des fichiers de migration, la commande ressemblait donc à 0001 0003 0004 sans 0002. Dans le deuxième fichier de migration I 'a créé un modèle nommé utilisateur.

Le problème était que lorsque j'ai exécuté python manage.py migrate, Django n'a pas pu trouver l'emplacement où le modèle nommé utilisateur a été créé (ce modèle a été créé dans le fichier 0002).

Je l'ai résolu en ajoutant manuellement ce code au fichier de migration 0001:

migrations.CreateModel(
        name='user',
        fields=[
            (...necessary fields...),
        ],
        options={
            'ordering': ('title',),
        },
    ),
8
Roberto

J'ai rencontré un problème similaire, où db\migrations\operations\models.py lançait une KeyError après avoir renommé un modèle via le refactoring (changement de nom) de PyCharm. 

Apparemment, le refactoring a également eu lieu dans le fichier de migration. Lors de l'ouverture du fichier de migration et de la modification du nom d'origine, la commande makemigrations fonctionnait correctement.

13
SaeX

J'avais le même problème et je trouvais que la solution la plus simple, si votre fichier models.py était intact, consistait simplement à supprimer tous les anciens fichiers migrés, puis à relancer makemigrations. Je ne pense pas que squashmigrations serait utile, car il ne rassemble que tous les fichiers de migration différents en un seul et il migre sur la base des fichiers de migration actuels. Ce qui n'aide pas si vos fichiers de migration sont en quelque sorte corrompus. Ce qui est la cause de ce problème en premier lieu.

7
Rijo Simon

J'ai trouvé ce qui cause ceci et la solution pour cela. Si vous avez une migration bloquée ayant une propriété "remplace", supprimez les nuplets dans "remplace" qui font référence aux migrations manquantes dans votre table Django_migrations. Cela corrige le problème.

2
kagronick

Je voudrais faire @ceasaro mots, le mien sur son commentaire sur ce répondre

Les versions les plus récentes de Django peuvent détecter les changements et demander ce qui a été fait. J'ajouterais que Django pourrait mélanger l'ordre d'exécution de certaines commandes de migration. 

Il serait sage d'appliquer de petites modifications et d'exécuter makemigrations et migrate. Si l'erreur se produit, le fichier de migration peut être modifié. 

Certaines lignes d’ordre d’exécution peuvent être modifiées pour éviter the error.

1
diogosimao

J'ai rencontré un problème similaire, mais je ne pouvais pas identifier la source du problème dans mes fichiers de migration. Aucun fichier de migration manquant non plus. C'est possible que je n'ai pas assez cherché. 

Cependant, quand je "squashmigrations" cela a résolu le problème. Je réponds ici pour que toute personne accédant à cette page puisse également essayer cette solution.

0
gowthaman

Je sais que c'est une vieille question. Mais si quelqu'un arrive googler:

Dans mon cas particulier, j'ai eu cette erreur après avoir renommé un modèle et modifié simultanément ses métadonnées (par exemple, renommer un modèle et son nom détaillé)

Pour résoudre ce problème, j'ai modifié la dernière migration, en supprimant (ou en commentant) les lignes relatives aux métadonnées, puis en exécutant à nouveau la commande de migration. Après cela, relancez makemigrations/migrate orders pour mettre à jour les métadonnées de la base de données.

J'utilise Django 2.0 et PostgreSQL

J'espère que vous avez déjà résolu le problème. JGED

0
José