2016-06-15 15 views
1

Ich habe eine Datei mit einer Reihe von Daten zwischen mehreren Projekten. Die Daten müssen in die Django-Datenbank geladen werden. Die Datei ändert sich nicht so sehr, daher ist es ausreichend, sie einmalig beim Serverstart zu laden. Da die Datei von mehreren Projekten geteilt wird, habe ich nicht die volle Kontrolle über das Format, also kann ich das nicht in ein Fixture oder etwas konvertieren.Daten beim Start laden

Ich habe versucht, es in bereit() zu laden, aber dann habe ich ein Problem beim Erstellen einer neuen Datenbank oder Migrieren einer vorhandenen Datenbank, da scheinbar bereit() aufgerufen wird, bevor Migrationen abgeschlossen sind und ich bekomme Fehler von der Verwendung von Modellen haben keine zugrunde liegenden Tabellen. Ich habe versucht, es in class_prepared Signal-Handler zu setzen, aber der Ladeprozess verwendet mehr als ein Modell, so dass ich nicht wirklich sicher sein kann, dass alle erforderlichen Modellklassen vorbereitet sind. Auch scheint es, dass ready() nicht aufgerufen wird, wenn Tests ausgeführt werden, daher schlagen Komponententests fehl, weil die Daten fehlen. Was ist der richtige Ort, um so etwas zu tun?

Antwort

1

Es scheint, dass was ich suche nicht existiert. Django vertraut dem Benutzer auf Migrationen und Ähnliches und überprüft die Datenbank beim Laden nicht. Daher gibt es im System keinen Platz, an dem Sie beim Systemstart Daten laden können und sicher sein müssen, dass Sie sie tatsächlich laden können. Was ich getan habe, ist das Laden der Daten in ready(), aber mache zuerst eine Plausibilitätsprüfung, indem du MyModel.objects.exist() in einem Versuch tust: außer: block und zurück, wenn es eine Ausnahme gab. Das ist nicht ideal, aber ich habe keinen anderen Weg gefunden.

Verwandte Themen