1

Ich habe eine Frage über die Reihenfolge, in der Tabellen in einer Migration erstellt werden. Da es in Modell B eine ForeignKey gibt, um eine Verbindung zu Modell A herzustellen, erstelle ich Modelle in der Reihenfolge A, B und C in models.py. Dann:Django makemigrations erstellt keine Modelle in der Reihenfolge in models.py

python manage.py makemigrations app 

Es ist die erzeugte Migrationsdatei alle Modelle zu erstellen, aber die Reihenfolge ist:

- Create model B 
- Create model C 
- Create model A 
- Add field a_name to b. 

Da die Reihenfolge, in models.py wirklich wichtig ist, aber warum nicht makemigrations Folge die gegebene Reihenfolge?

+1

Warum ist die Bestellung in Ihrem models.py wichtig? Ist das in den Migrationsdateien noch relevant? – knbk

+0

@knbk, wie ich den ForeignKey im Modell B verwende, so sollte Modell A vor B erstellt werden. Obwohl ich ein doc diese App lese. A kann in Modell B verwendet werden, um das Problem der Bestellung zu vermeiden, aber hier behalte ich das Modell in der richtigen Reihenfolge in models.py – zhihong

Antwort

1

Die Reihenfolge, in der Sie Ihre Modelle in Ihrem models.py platzieren, ist nur dann von Bedeutung, wenn einer von ihnen einen anderen als ForeignKey referenziert. In einer solchen Situation ist die Reihenfolge wichtig und Sie werden feststellen, dass die Migration die Reihenfolge bewahrt.

Was ist wirklich wichtig ist nicht, was zeigt, wenn Sie m tun anage.py makemigrations aber was passiert, wenn Sie tun manage.py migrate dort django in der Regel die richtige Reihenfolge. Wenn Sie zu jeder Zeit die Reihenfolge der Tabellenerstellung steuern möchten, können Sie die Migrationsdatei bearbeiten (auch wenn diese nicht wirklich benötigt wird).

+0

ja, ich habe ForeignKey verwendet, deshalb kontrolliere ich die Modellreihenfolge in models.py . Die automatisch generierte Migrationsdatei entspricht jedoch nicht der Reihenfolge. Das ist also ein normaler Fall, oder? Für mich ist es nur ein wenig verwirrend. Ich erwarte, dass ich nur "create the model" sehe, aber nicht wie "create the model -add field to the model", dies ist wie das Erstellen und Ändern einer Tabelle. – zhihong

+0

Ah, ich sehe, ich weiß, dass die Migrationen geändert werden können, aber wie Sie gesagt haben, wird das nicht tun, wenn es wirklich benötigt wird. Vielen Dank für die Erklärung. – zhihong

+0

Hallo, da ich auch die Reihenfolge der Spalten steuern muss, wenn die Tabelle in der Datenbank erstellt wird, aber die manage.py Makemigrations Dosis nicht die Reihenfolge reservieren, wenn eine Spalte eine ForeignKey-Spalte ist, so änderte ich die Migrationsdatei. Ich hoffe wirklich, dass die Migrationsdatei die Modelle hat und die Spalten der Reihenfolge von models.py folgen, aber scheint es nicht zu dosieren. – zhihong

Verwandte Themen