2010-10-30 9 views
7

Ich habe einen Fehler bei der Erstellung meines eigenen Benutzermodells gemacht und versuche mich zu erholen.Laden eines Scheinwerfers vor einer Migration in den Süden

Ich habe eine South-Migration erstellt, die meine alten Benutzermodelle kopiert und django.contrib.auth.models.User-Modelle erstellt. Um sicherzustellen, dass meine derzeitigen Benutzer nicht im Dunkeln gelassen werden, habe ich eine Reihe von Komponententests erstellt, um sicherzustellen, dass alles entsprechend konvertiert wird.

Also, ich muss die South Migration testen und sehen, ob es funktioniert hat. Um dies zu tun, muss ich Daten des alten Benutzertyps laden, bevor die Migration ausgeführt wird. Wie mache ich das?

Antwort

7

Wenn die Testsuite über python manage.py test someapp ausgeführt wird, erstellt django zuerst eine Testdatenbank, wendet dann alle Migrationen in der richtigen Reihenfolge an und führt dann Testfälle aus. Wenn Sie also die Migration selbst testen möchten, müssen Sie die Fixture-Daten vor dieser Migration laden.

Sie können Ihrer Migration eine oder zwei Ladevorrichtungen hinzufügen, die Ihre Modelländerungen nur zum Zweck des Testens anwenden und dann entfernen.

def forwards(self, orm): 
    from django.core import management 
    management.call_command('loaddata', 'myfixture.json') 
    ... your migration 

auch Sie eine Bedingung auf einige aus django Einstellung hinzufügen können, dann müssen Sie nicht später den Code bearbeiten.

+0

Beachten Sie, dass das Laden von 'initial_data' auf diese Weise eine schlechte Idee ist: Nach einiger Zeit werden Sie neue Instanzen von Objekten in' initial_data.json' hinzufügen, die vor der Modellmigration geladen werden müssen. Getestet und nicht genehmigt;). –

Verwandte Themen