webentwicklung-frage-antwort-db.com.de

Django manage.py: Die Migration wurde vor ihrer Abhängigkeit angewendet

Beim Ausführen von python manage.py migrate stelle ich diesen Fehler fest:

Django.db.migrations.exceptions.InconsistentMigrationHistory: Migration
<appname>.0016_auto_<date2>_<time2> is applied before its dependency
<appname>.0001_squashed_0015_auto_<date1>_<time1>

laufende Showmigrations kehrt zurück:

<appname>
 [X] 0001_squashed_0015_auto_<date1>_<time1> (15 squashed migrations)
 [X] 0016_auto_<date2>_<time2>
 [ ] 0017_<modelname>_squashed_0019_auto_<date3>_<time3> (3 squashed migrations)

Ich habe gestern die Django-Erweiterungen ausprobiert, als es nach dem Ausführen einiger direkter SQL-Abfragen durcheinander kam und ich mich mit git zurückgesetzt habe. Ich lerne immer noch über Migrationen, daher verstehe ich nicht, was falsch ist, da mir scheint, dass beide Migrationen bereits angewendet wurden.

Danke für deine Hilfe!

15

Sie haben die Migrationen gestaucht, sodass eine der Abhängigkeiten, die 0016_auto_<date2>_<time2> hatte, nun Teil der neu erstellten gestauchten Migrationen ist. Inzwischen ist der 0016_auto_<date2>_<time2> bereits ausgeführt worden, und Sie versuchen nun, die gequetschte Migration auszuführen. 

Ich persönlich weiß nicht, ob es eine Möglichkeit gibt, dies automatisch zu beheben. Sie müssen die Probleme selbst beheben. Wenn Sie über eine Versionskontrolle verfügen, machen Sie diese Änderungen rückgängig und versuchen Sie zu überdenken, wie Sie die Migration unterdrücken, ohne die alten zu beeinträchtigen. 

8
masnun
  1. Bearbeiten Sie die Abhängigkeiten der in Konflikt stehenden Migration, sodass sie nicht mehr auf die bereits angewendete Migration verweist.
  2. Führen Sie dann python manage.py erneut aus, und es sollte behoben sein.

    • Warnung: Dies funktioniert nur, wenn der Status der Datenbank mit dem Status übereinstimmt, in dem Sie die widersprüchliche Migration angewendet haben.
0
Duilio

führen Sie diesen python manage.py dbshell aus

INSERT INTO public.Django_migrations(app, name, applied)
VALUES ('YOUR_APP_NAME, '0017_<modelname>_squashed_0019_auto_<date3>_<time3>', now());

und es sollte dir gut gehen. Wenn sich Ihre Migration stark in die Datenbank geändert hat, ist es leider nicht so einfach, sie zu beheben.

0
test30

Das hat bei mir funktioniert. Ich danke meinem Kollegen für das Teilen dieses Wissens, nachdem ich stundenlang online gesucht hatte.

Starten Sie Ihre DB-Shell

python manage.py dbshell

Verwenden Sie die gewünschte Datenbank. Wenn Sie es nicht wissen, führen Sie "Datenbanken anzeigen" aus.

mysql>use <database_name>;

Rufen Sie alle Migrationen unter Ihrer App ab

mysql> select * from Django_migrations where app='<app>';

Sie sehen die Ausgabe mit den IDs neben allen Migrationen. Schauen Sie sich die Migration an, die Sie löschen möchten. Angenommen, die ID lautet 361

mysql> delete from Django_migrations where id=361;
0
user3661888