2016-05-02 5 views
1

Hier sind mein aktueller Status:Fehler beim zurück zur vorherige Migration Roll

mainapp 
[X] 0001_initial 
[X] 0002_authorprofile_uuid 
[X] 0003_auto_20151107_1243 
[X] 0004_article_approved 
[X] 0005_auto_20151129_0950 
[X] 0006_article_category 
[X] 0007_auto_20160501_1601 

ich jedoch zurück zu 0005. gehen will, wenn ich /manage.py migrate mainapp 0005_auto_20151129_0950 laufen bekomme ich die Fehler ValueError: The database backend does not accept 0 as a value for AutoField.

Dies ist ein Fehler Ich habe in models.py behoben, also möchte ich zurück zu 0005 gehen und neu starten und die Migrationen erneut durchführen.

class Article(models.Model): 
    category = models.ForeignKey(Category, default = 1) #trying to add this and set default value. It was first set to 0 but changed it to 1 after it failed 
+0

Entschuldigung, jetzt habe ich ein besseres Verständnis des echten Problems. Nachdem Sie das Feld von Auto zu einem ForeignKey ändern, scheinen Sie am Ende eine 0 in dieses Feld eingefügt haben. Mysql zum Beispiel erlaubt nicht 0 in Auto-Feldern, wenn Sie versuchen, Null einzufügen, fügt es den nächsten Wert für die automatische Erhöhung ein. Also ist das Problem nicht im Code, sondern Daten oder das ist, was es mir scheint. – e4c5

+0

@ e4c5 grundsätzlich 0007 denkt, das Feld ist in der Datenbank, aber es ist eigentlich nicht. Da ist keine Spalte. Also, wenn ich den Standardwert ändere, kann es nicht, weil die Spalte nicht existiert. wenn ich versuche, das Feld fallen zu lassen, kann es nicht, weil es nicht existiert – User

+0

@ e4c5 was ist, wenn ich nur eine Spalte über SQL-Befehle hinzufügen und dann migrieren, um es fallen zu lassen? dann wird der Tropfen funktionieren. – User

Antwort

0

Mein Vorschlag ist, SQL-Konsole zu öffnen und wirft die django_migrations Tabelle.

DELETE FROM django_migrations WHERE app='mainapp' 

Dann stellen Sie sicher, dass alle Ihre Dateien in den Migrationen/Ordner in die Versionskontrolle eingecheckt wurden und löschen Sie sie! Dann tun

./manage.py makemigrations mainapp 
./manage.py migrate mainapp --fake 

Wenn --fake nicht funktioniert, ist es Zeit für verzweifelte Maßnahme und --fake-initial aber dann ist es sehr wahrscheinlich, dass, wenn Sie Ihre App implementieren einige wo sonst werden Sie durch diese alle Verfahren gehen müssen wieder :(

Verwandte Themen