2016-05-30 9 views
6

Ich mache eine wiederverwendbare Django App ohne ein Projekt. Dies ist die Verzeichnisstruktur:Wie migrieren Sie für eine wiederverwendbare Django-App?

/ 
/myapp/ 
/myapp/models.py 
/myapp/migrations/ 
/myapp/migrations/__init__.py 

Als ich django-admin makemigrations laufen bekomme ich die folgende Fehlermeldung:

django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 

Offensichtlich ist dies, weil ich nicht ein Einstellungsmodul konfiguriert haben, weil dies ein wiederverwendbar App Ich möchte jedoch immer noch Migrationen mit meiner App versenden. Wie kann ich sie machen?

+0

Sie erstellen und testen die Migration in einer App, dann ist das Schiff allein. –

Antwort

7

Sie benötigen ein funktionierendes Django-Projekt (mit Ihrer App installiert), um Migrationen durchzuführen.

Eine gängige Methode hierfür ist ein "Test" -Projekt, das das Notwendigste eines Django-Projekts enthält, das Sie ausführen können, um Migrationen usw. durchzuführen. Die Migrationen werden an der richtigen Stelle in Ihrem App-Verzeichnis erstellt So können Sie immer noch die richtige Versionskontrolle in Ihrer eigenen wiederverwendbaren App haben.

Die auf diese Weise erstellten Migrationen sind in sich abgeschlossen (vorausgesetzt, Ihre Modelle hängen nicht von Modellen anderer Apps ab) und können als Teil Ihrer gepackten, wiederverwendbaren App ausgeliefert werden.

Viele der größeren Django-basierte Projekte tatsächlich ein Testprojekt als Teil ihres Codes versenden, so dass Entwickler schnell kann es in Ordnung bringen laufenden Anwendungen zu testen und machen Wanderungen usw.

4

Eigentlich Sie don‘ Sie brauchen kein Projekt, alles, was Sie brauchen, ist Einstellungsdatei und Skript, das die Erstellung von Migrationen ausführt. Einstellungen müssen Folowing (Minimum) enthalten:

# test_settings.py 

DEBUG = True 

SECRET_KEY = 'fake-key' 

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'your_app' 
] 

Und das Skript, das macht Migrationen sollte wie folgt aussehen:

# make_migrations.py 

import os 
import sys 

if __name__ == "__main__": 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "test_settings") 
    from django.core.management import execute_from_command_line 
    args = sys.argv + ["makemigrations", "your_app"] 
    execute_from_command_line(args) 

und Sie sollten es durch python make_migrations.py laufen. Hoffe es hilft jemandem!