0
votes

Django Duplicate Migrations dans les applications

Django continue de faire des migrations en double pour ma demande. J'ai couru Makemigrations et migrer avant que j'ai changé mon modèle. Après les modifications IR Makemigrations Pour effectuer des migrations pour le modèle mis à jour, j'ai eu l'erreur suivante: xxx

pour les corriger "python manage.py Makemigrations - -Mérige '

exécutant Makemigrations --Mérige ne fonctionne pas: ValueError: Impossible de trouver un ancêtre commun de {' 0002_remove_content_type_name ',' 0002_remove_content_type_name 3 ',' 0001_initial 3 '}

Il existe de nombreuses migrations en double sur les applications que je n'ai pas touchées (auth, admin, etc.): xxx

La seule application qui, autant que je sache, aurait dû être affectée est la base de données . Pourquoi Django est-il en train de faire ces migrations en double? Y a-t-il un moyen de vous débarrasser de ceux-ci? Ou appliquez-les afin qu'ils ne bloquent plus? Comment puis-je vous assurer que cela ne se reproduise plus?


7 commentaires

Django ne "crée pas des migrations en double", et cela n'utilise certainement pas de blouses dans les noms de fichiers de migrations, de sorte que la cause du problème est de votre côté. Compte tenu du symptôme et des noms de fichiers, je soupçonne Stronly, ce sont des fichiers dupliqués de manière vraiment simple - que vous pouvez facilement vérifier vous-même en comparant ces fichiers contenus, n'est-ce pas? Si oui, le remède est simple: supprimez simplement ces fichiers en double ...


Je pensais déjà que le format était étrange. Je veux enlever les migrations, mais je ne sais pas où ils vivent. J'ai un virtualenv configuration.


Je les ai trouvés, ils vivent dans mon env. Je suppose que je peux simplement le supprimer et faire un nouvel environnement afin de réinitialiser le tout.


Vous pouvez simplement supprimer directement les fichiers de votre env - c'est une copie locale, vous pouvez faire ce que vous voulez avec elle. Ou désinstaller / réinstaller Django de votre env.


Merci. Je ne sais toujours pas où sont venus les copies, mais cela est réparé maintenant, fermera la question.


Eh bien, il serait en effet intéressant de savoir où ces dossiers sont venus d'empêcher la question de se reproduire, mais il y a de fortes chances que c'était un accident non reproductible ...


OMFG, j'ai eu le même problème. Je ne sais pas pourquoi j'ai aussi eu des migrations en double. Je pense que c'est un bug de Django car l'erreur semble assez nouvelle. Tu as sauvé mes gars de la vie!


3 Réponses :


0
votes

Parfois, si vous avez l'option, le moyen le plus facile et le plus rapide est ...

  • Supprimer les fichiers de migration.
  • Supprimer une base de données entière.
  • Run "Python Manage.py Makemigrations" à nouveau
  • Run "Python Manage.py migrer" à nouveau

    ou ... Si vous avez une DB en production avec des données et que vous ne pouvez pas réinitialiser:

    • Vérifier la dernière version de la production
    • Supprimer les fichiers de migration (jusqu'à cette version).
    • Supprimez la base de données locale (SQLite) entière).
    • Run "Python Manage.py Makemigrations" à nouveau
    • Run "Python Manage.py migrer" à nouveau

      Important ... Copier / Migration / Dossier quelque part pour récupérer des fichiers si nécessaire.


2 commentaires

Je pensais la même chose, mais comment puis-je supprimer les migrations des applications comme auth-auth et session ? Ils vivent dans mon environnement quelque part?


Supprimer l'environnement: rmvirtualenv .... puis le reconstituer. ;)



0
votes

Il s'est avéré que les doublons n'étaient pas créés par Django mais par un autre processus. Supprimer complètement mon environnement et réinstaller toutes les dépendances aidé. Supprimer les migrations aurait également travaillé.


0 commentaires

0
votes

Dans mon cas, le problème était présent:

class BaseImageField(models.ImageField):
    attr_class = BaseImageFieldFile

    def __init__(self, *args, **kwargs):
        kwargs.setdefault('validators', [])
        kwargs['validators'].append(image_validator)    <----------------------------
        super().__init__(*args, **kwargs)


0 commentaires