2011-04-23 7 views
3

Lorsque vous essayez d'utiliser loaddata sur ma machine locale (win/sqlite):Django paramètres loadData d'erreur

python django-admin.py loaddata dumpdata.json 

Je reçois l'erreur suivante:

raise ImportError("Settings cannot be imported, because environment variable %s is undefined." % ENVIRONMENT_VARIABLE) ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined. 

J'utilise l'application de djangoconfig si cela aide :

""" 
Django-config settings loader. 
""" 

import os 

CONFIG_IDENTIFIER = os.getenv("CONFIG_IDENTIFIER") 
if CONFIG_IDENTIFIER is None: 
    CONFIG_IDENTIFIER = 'local' 

# Import defaults 
from config.base import * 

# Import overrides 
overrides = __import__(
    "config." + CONFIG_IDENTIFIER, 
    globals(), 
    locals(), 
    ["config"] 
) 

for attribute in dir(overrides): 
    if attribute.isupper(): 
     globals()[attribute] = getattr(overrides, attribute) 

projets> python manage.py loaddata dumpdata.json --settings = config.b ase

WARNING: Forced to run environment with LOCAL configuration. 

Problem installing fixture 'dumpdata.json': Traceback 
(most recent call last): 
    File "loaddata.py", line 174, in handle 
    obj.save(using=using) 

... 


    File "C:\Python26\lib\site-packages\django\db\backends\sqlite3\base.py", line 
234, in execute 
    return Database.Cursor.execute(self, query, params) 
IntegrityError: columns app_label, model are not unique 
+0

Le 'IntegrityError 'On dirait que ça vient de la table des types de contenu, l'un des paquets contrib. Je parie que la base de données que vous essayez de charger contient déjà quelque chose, probablement à cause d'une charge précédente qui a échoué. Comme il semble que vous utilisez SQLite, jsut supprime le fichier de base de données, 'syncdb' si nécessaire pour créer une nouvelle base de données, puis réessayez votre chargement. –

+1

D'accord avec @Mike DeSimone, sauf 'syncdb' va initialiser content_types avec des données afin que vous puissiez obtenir la même erreur (suivez son conseil pour voir!). Vous devrez peut-être éditer dumpdata.json pour supprimer les données pour content_types. – JCotton

+0

Supprimé sqlite db. Avez-syncdb. Loaddata essayé = même erreur. – Eeyore

Répondre

1

Il existe deux méthodes standard pour fournir vos paramètres de Django.

  • aide mis (ou export sur Unix) set DJANGO_SETTINGS_MODULE=mysite.settings
  • En variante, comme une option avec django-admin.py --settings=mysite.settings

Django-config fait les choses différemment, car il vous permet d'avoir plusieurs fichiers de paramètres. Django-config fonctionne avec manage.py pour spécifier les éléments à utiliser. Vous devriez utiliser manage.py autant que possible; il met en place l'environnement. Dans votre cas, essayez ceci où --settings pointe vers le fichier .py spécifique que vous voulez utiliser depuis le dossier config de django-config.

django-admin.py loaddata dumpdata.json --settings=<config/settings.py>

En fait --settings veut syntaxe paquet python alors peut-être <mysite>.config.<your settings>.py

+0

Je l'ai essayé et cela n'a pas fonctionné - peut-être parce que j'utilise l'application djangoconfig pour gérer mes paramètres. – Eeyore

+0

Edité ma question avec la sortie de mon interprète. manage.py semble saisir le fichier de configuration correct mais maintenant je reçois une nouvelle erreur. – Eeyore

+0

En fait, vous ne devriez pas avoir besoin de --settings avec manage.py. On dirait que loaddata fonctionne avec manage.py alors essayez de laisser l'option settings. – JCotton

5

Ne pas utiliser django-admin.py pour autre chose que la mise en place d'un projet initial. Une fois que vous avez un projet, utilisez manage.py à la place - il définit la référence à votre fichier de paramètres.

+0

J'ai trouvé cette réponse très utile quand j'ai rencontré une situation similaire. Cela m'a fait sortir d'une confiture rapidement, merci! –

3

syncdb chargera content_types, vous devez effacer cette table avant de charger les données. Quelque chose comme ceci:

c:\> sqlite3 classifier.db 
sqlite> delete from django_content_type; 
sqlite> ^Z 
c:\> python django-admin.py loaddata dumpdata.json 

Aussi, assurez-vous que vous ne créez pas un super-utilisateur, ou tout autre utilisateur, lorsque vous syncdb, comme ceux-ci sont susceptibles d'entrer en collision aussi avec votre appareil de données ...

Questions connexes