Django Migration wendet die Migrationsänderungen nicht an

7

Verwenden von django 1.7.7 Ich möchte die Migration von django verwenden, um ein Feld hinzuzufügen oder zu entfernen. also habe ich model.py modifiziert und ran

%Vor%

Dann überprüft die Admin-Seite, es ist nicht aktualisiert. Dann habe ich versucht, den Migrationsordner zu entfernen und es erneut versucht; Der Migrationsbefehl besagt, dass keine Migrationen angewendet werden müssen.

Wie kann ich die Migration durchführen? Hinweis: Ich möchte die neue Technik verwenden, die die Migration von Django verwendet, nicht den alten Süden.

    
max 27.04.2015, 17:33
quelle

5 Antworten

14

Das Löschen des Migrationsverzeichnisses ist niemals eine gute Idee, da Django dann nicht mehr weiß, welche Migration angewendet wurde und welche nicht (und sobald eine App irgendwo bereitgestellt wird, kann es sehr schwierig werden, die Dinge wieder synchron zu bekommen).

  

Haftungsausschluss : Wenn solche Dinge auftreten, ist es am besten, die Datenbank zu sichern, wenn sie etwas Wertvolles enthält. Wenn es in der frühen Entwicklung nicht notwendig ist, aber sobald Dinge auf dem Backend nicht mehr synchron sind, besteht die Chance, dass sich die Dinge verschlechtern. : -)

Zum Wiederherstellen können Sie versuchen, Ihre Modelle so anzupassen, dass sie genau entsprechen, bevor Sie die Felder hinzugefügt / entfernt haben . Dann können Sie

ausführen %Vor%

was zu einer ersten Migration führt ( 0001_initial... ). Dann kannst du Django sagen, dass er diese Migration fälschen soll, was bedeutet, dass er seinen internen Zähler auf dieses 0001_initial setzen soll:

Mit Django 1.7:

%Vor%

Mit Django & gt; = 1.8:

%Vor%

Versuchen Sie nun, Ihr Modell zu ändern und makemigrations erneut auszuführen. Es sollte jetzt eine 0002_foobar Migration erstellt werden, die Sie wie erwartet ausführen können.

    
sthzg 27.04.2015, 18:02
quelle
4

Stellen Sie sicher, dass der Ordner migrations/ eine __init__.py -Datei

enthält

Habe eine halbe Stunde darüber verloren.

    
quelle
2

In meinem Fall wurden die Migrationen nicht in der MySQL-Datenbank reflektiert. Ich habe die Zeile von 'myapp' (in Ihrem Fall 'myproj') manuell aus der Tabelle 'django_migrations' in der mysql-Datenbank entfernt und die gleichen Befehle für die Migration erneut ausgeführt.

    
nina 15.03.2017 08:57
quelle
0

Ich finde Django-Migrationen ein kleines Rätsel und tendiere dazu, externe Tools zu bevorzugen (zB Liquibase).

Ich habe jedoch gerade dieses Problem mit "Keine Migrationen zum Anwenden" erfahren. Ich habe auch versucht, den migrations Ordner zu entfernen, was nicht hilft.

Wenn Sie den Ordner migrations bereits entfernt haben, ist hier ein Ansatz, der für mich funktioniert hat.

Erzeugen Sie zuerst die neuen "sauberen" Migrationen:

%Vor%

Sieh dir dann das SQL an und schaue, ob es vernünftig aussieht:

%Vor%

Wenden Sie dann das gleiche SQL auf Ihrer Datenbank an.

Ich benutze Postgres, aber es wird für andere Engines ähnlich sein.

Eine Möglichkeit besteht darin, den Inhalt in eine Datei zu schreiben:

%Vor%

Ein anderer ist Pipe die SQL direkt:

%Vor%

Oder kopieren und einfügen usw.

    
Andrew E 20.11.2017 08:52
quelle
0

Stellen Sie zusätzlich zu den anderen Antworten sicher, dass Sie in models.py managed = True im Meta jeder Tabelle

haben     
user4458727 03.01.2018 22:13
quelle

Tags und Links