2016-08-11 2 views
1

J'apprends Django et je continue de me heurter à des obstacles et il faut du temps pour googler pour surmonter l'obstacle. Mais celui-ci m'a pris plus de 20 minutes et je ne connais toujours pas la réponse. Je sais que c'est simple mais j'ai essayé beaucoup de choses et je n'arrive pas à avoir accès à mon fichier models.py. Je continue à obtenir la même erreurImportError: Aucun module nommé app.models

Erreur

Traceback (most recent call last): File "import_states.py", line 11, in from app.models import State ImportError: No module named app.models

code dans le contexte

#!/usr/bin/env python 

import csv 
import os 
import sys 

sys.path.append("..") 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings") 

from app.models import State 

states = State.objects.all() 

for state in states: 
    print state.name 

Voici le chemin à mon dossier de script contenant le script

/Users/ahmedawayhan/Development/projects/states/project/scripts 

et voici le chemin dans le dossier qui contient le models.py

/Users/ahmedawayhan/Development/projects/states/app 

Toute aide serait appréciée.

+0

Je ne suis pas familier avec django - mais si je me souviens bien, appeler 'app.models' d'importation recherchera un dossier' app' dans le répertoire du script. Puisque ce n'est pas le cas, cela échoue. – nlsdfnbch

+1

Pouvez-vous confirmer qu'il y a un '__init __. Py' dans votre répertoire' states/app/'? – nlsdfnbch

+0

oui il y a un '__init__.py' et quand j'exécute un script en utilisant ./manage.py shell, je peux importer depuis app.models et ça marche. –

Répondre

1

Ne le faites pas de cette façon. Faites-le dans le django-way. Tout d'abord lu sur custom management command

Et d'ajouter:

app/gestion/commandes/import_states.py

from django.core.management.base import BaseCommand 
from app.models import State 

class Command(BaseCommand): 
    def handle(self, *args, **options): 

    states = State.objects.all() 

    for state in states: 
     print state.name 

et l'appeler:

python manage.py import_states 

Si vous avez vraiment besoin votre- chemin:

sys.path.append("../..") 

ou appelez:

python project/scripts/import_states.py 
+0

Merci qui a fonctionné! –