Frage

, wie ich in der Regel nicht tun, die vorne Design meiner Modelle in Django Projekte, die ich die Modelle viel Modifikation am Ende und damit meine Testdatenbank jedes Mal zu löschen (weil „syncdb“ wird nicht immer die Tabellen ändern automatisch für Sie). Unten liegt meinen Workflow und ich möchte über Sie hören. Irgendwelche Gedanken willkommen ..

  1. Ändern Sie das Modell.
  2. Löschen Sie die Testdatenbank. (Immer eine einfache SQLite-Datenbank für mich.)
  3. Ausführen "syncdb".
  4. Generieren einige Testdaten über Code.
  5. gehe zu 1.

Eine zweite Frage in Bezug auf diesen .. Wenn Ihr Workflow wie oben ist, wie führen Sie den 4. Schritt? Haben Sie die Testdaten manuell erzeugen oder ist es eine richtige Hakenspitze in Django apps, wo Sie den Test-Daten-Erzeugungs-Code beim Start des Servers injizieren? \

TIA.

War es hilfreich?

Lösung

Die Schritte 2 und 3 kann in einem Schritt erfolgen:

manage.py reset appname

Schritt 4 wird am einfachsten geschaffen, aus meinem Verständnis von Armaturen mit

Andere Tipps

Dies ist eine Aufgabe für Djangos Armaturen. Sie sind bequem, weil sie datenbankunabhängig und die Testumgebung (und manage.py) haben eingebaute Unterstützung für sie.

Um sie zu verwenden:

  1. Ihre Daten in Ihrer Anwendung einrichten (Anruf es "foo") mit dem Admin-Tool
  2. Erstellen Sie ein Leuchten-Verzeichnis in Ihrem "Foo" App-Verzeichnis
  3. Typ: python manage.py dumpdata --indent=4 foo > foo/fixtures/foo.json

Jetzt, nach Ihrer syncdb Bühne, geben Sie einfach:

 python manage.py loaddata foo.json

Und Ihre Daten werden neu erstellt werden.

Wenn Sie sie in einem Testfall wollen:

class FooTests(TestCase):
    fixtures = ['foo.json']

Beachten Sie, dass Sie müssen neu erstellen oder manuell Fixtures aktualisieren, wenn Ihr Schema drastisch ändert.

Sie können mehr über Befestigungen in der django docs für Fixture Laden lesen

Hier ist, was wir tun.

  1. Apps sind mit einem Schema Versionsnummer benannt. appa_2, appb_1, etc.

  2. Kleinere Änderungen ändern nicht die Nummer.

  3. Wichtige Änderungen erhöhen die Nummer. Syncdb funktioniert. Und ein „Datenmigration“ Skript geschrieben werden kann.

    def migrate_appa_2_to_3():
        for a in appa_2.SomeThing.objects.all():
            appa_3.AnotherThing.create( a.this, a.that )
            appa_3.NewThing.create( a.another, a.yetAnother )
        for b in ...
    

Der Punkt ist, dass löschen und neu erstellen, ist nicht immer angemessen. Es ist manchmal hilfreich, Daten zu bewegen, um das neue Modell das alte Modell bilden, ohne von Grund auf neu zu erstellen.

Süd ist die coolste.

Obwohl good ol‘Reset am besten funktioniert, wenn die Daten keine Rolle spielt.

http://south.aeracode.org/

Matthew Antwort hinzuzufügen, habe ich auch oft benutzerdefinierte SQL verwenden Anfangsdaten zu liefern, wie dokumentiert hier .

Django schaut nur für Dateien in <app>/sql/<modelname>.sql und führt sie nach Tabellen während syncdb oder sqlreset zu schaffen. Ich benutze benutzerdefinierte SQL, wenn ich etwas tun müssen, wie meine Django Tabellen aus anderen Nicht-Django-Datenbanktabellen füllen.

Persönlich meine Entwicklung db für ein Projekt arbeite ich jetzt an ist ziemlich groß, so dass ich

scroll top