2016-05-30 51 views
6

Sto creando un'app Django riutilizzabile senza un progetto. Questa è la struttura di directory:Come effettuare migrazioni per un'app Django riutilizzabile?

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

Quando eseguo django-admin makemigrations ottengo il seguente errore:

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. 

Ovviamente, questo è perché non ho un modulo impostazioni configurate, perché questo è un riutilizzabile app. Tuttavia, mi piacerebbe comunque spedire le migrazioni con la mia app. Come posso farli?

+0

È possibile creare e testare la migrazione in un'app, quindi la spedizione è sola. –

risposta

7

È necessario un progetto Django funzionale (con l'app installata in esso) per effettuare le migrazioni.

Un modo comune per fare questo è avere un progetto "test" che contiene le necessità essenziali di un progetto Django, che è possibile eseguire per effettuare migrazioni, ecc. Le migrazioni verranno create nel posto giusto all'interno della directory dell'app in modo che tu possa avere il controllo di versione appropriato ecc. all'interno della tua app riutilizzabile.

Le migrazioni create in questo modo saranno autonome (supponendo che i modelli non dipendano da modelli di altre app) e possano essere spediti come parte dell'app riutilizzabile e pacchettizzata.

Molti dei progetti basati su Django più grandi realtà spedire un progetto di test come parte del loro codice, in modo che gli sviluppatori possono ottenere rapidamente in esecuzione al fine di testare le applicazioni e rendere le migrazioni ecc

4

In realtà, è don' Se è necessario disporre di un progetto, tutto ciò di cui si ha bisogno è il file e lo script delle impostazioni, che esegue la creazione delle migrazioni. impostazioni devono contenere folowing (minimo):

# test_settings.py 

DEBUG = True 

SECRET_KEY = 'fake-key' 

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

e lo script, che fa le migrazioni dovrebbe essere simile a questo:

# 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) 

e si dovrebbe eseguirlo python make_migrations.py. Spero che aiuti qualcuno!