Ich versuche, meine App dazu zu bringen, mit der offiziellen Methode, einige INSERT-Anweisungen in /sql/.sql
zu platzieren, einige benutzerdefinierte SQL auf syncdb auszuführenWenn ich jetzt "manage.py sqlall" ausführe, ist das gesamte SQL, das ich ausführen möchte, da.
Nach dem Ausführen von syncdb sind die gewünschten Daten jedoch nirgendwo in der Datenbank zu finden! Fehle ich etwas?
BEARBEITEN: Die App, für die ich die Inserts erstellen möchte, verwendet South-Migrationen, und das ist vielleicht der Grund, warum das ursprüngliche SQL übersprungen wird. Weiß jemand, wie ich es zwingen kann, das SQL nach der Migration vielleicht auszuführen?
Initial data sql wird nicht ausgeführt für Anwendungen in Süd-Management. Soweit ich das verstanden habe, ist dies beabsichtigt, obwohl ich keinen formellen Beweis dafür finden konnte, außer diesem Mailinglistenbeitrag .
Um das gleiche Verhalten zu erreichen, können Sie eine Migration und konvertieren Ihre SQL in Python erstellen. So habe ich es gemacht, um eine Ansicht zu installieren:
Erstellen und bearbeiten Sie die Migration:
%Vor%Hier ist die Migration selbst:
%Vor%Bei Datenmigrationen ist der Ablauf ähnlich:
%Vor%Hier ist die Migration selbst:
%Vor%Das offizielle South doc für Daten-Fixtures ist defekt:
Es skaliert nicht gut in Bezug auf Schemaänderungen.
Sie sollten die Fixture-Datei jedes Mal kopieren und anpassen, wenn Sie die Bar
-Modellfelder ändern. Also würden Sie mit "my_fixture_v1.json", "my_fixture_v2.json" und so weiter enden.
Andernfalls, wenn Sie die Versionierung nicht beibehalten und nur die neueste Version behalten, wird es zwischen früheren Versionen des Modells und der Fixtures zu Unstimmigkeiten kommen und Sie werden nicht in der Lage sein, Migrationen hin und her zu navigieren.
Der vorgeschlagene Ansatz berücksichtigt diese beiden Probleme:
orm.Bar
verwenden, haben Sie die Menge der Felder, die für Bar
genau an diesem Punkt im Verlauf gelten. Sie erhalten keine fehlenden oder zusätzlichen Felder. Bar
änderungen zu kopieren. Es ist möglich, rückwärts zu migrieren.
Beachten Sie, dass filter().delete()
combination anstelle von get().delete()
verwendet wird. Auf diese Weise löschen Sie nicht die Bar
s, die vom Benutzer geändert wurden, und Sie können auch nicht mit Bar.DoesNotExist
fehlschlagen, wenn Sie sie nicht finden.
Tags und Links django django-models