2009-12-13 7 views
3

J'ai un projet Django, et je suis un peu novice en la matière. Je le test PyUnit suivant en essayant de sauver un objet dans une base de données PostgreSQL:Pourquoi Django dit-il que je n'ai pas encore défini DATABASE_ENGINE?

import unittest 

from foo.models import ObjectType 

class DbTest(unittest.TestCase): 
    def testDBConnection(self): 
     object_type = ObjectType() 

     object_type.name = 'Test Object' 
     object_type.description = 'For testing purposes' 

     object_type.save() 

Et mes paramètres de base de données comme ceci:

DATABASE_ENGINE = 'postgresql_psycopg2'   
DATABASE_NAME = 'FOO'    
DATABASE_USER = 'username'    
DATABASE_PASSWORD = 'password'   
DATABASE_HOST = 'localhost'    
DATABASE_PORT = '5432'  

Je courais python manage.py syncdb pour mon projet, travaillé avec succès, donc ma base de données devrait être configuré correctement. Cependant, je reçois l'erreur suivante lorsque je tente de lancer le test unitaire ci-dessus:

Fichier "C: \ Python26 \ lib \ site-packages \ django \ db \ backends \ factice \ base.py", ligne 15, dans la plainte raise ImproperlyConfigured, "Vous n'avez pas encore défini le paramètre DATABASE_ENGINE ." Incorrectement configuré: Vous n'avez pas encore défini le paramètre DATABASE_ENGINE .

Est-ce que quelqu'un a déjà eu l'expérience d'un problème comme celui-ci? Si oui, tout conseil sur par où commencer? Merci!

+0

Comment allez-vous lancer les tests - utilisez-vous le coureur de test de Django? –

Répondre

3

C'est probablement parce que vous exécutez des tests directement, c'est-à-dire simplement python testfile.py. De cette façon, vous contournez efficacement tous les mécanismes de Django et utilisez directement les classes Model. L'inconvénient est, le backend DB n'est pas configuré automatiquement (par Django, qui charge settings.py et se connecte à la base de données appropriée), d'où l'erreur que vous rencontrez. Je suppose qu'il existe une solution de contournement autour de ce problème, mais cela nécessite une connaissance des mécanismes internes de Django à coup sûr.

Ce que vous devez faire, c'est lancer votre test via le framework de test de Django (check out the documentation). Il prendra soin de régler correctement la connexion à la base de données, etc. Il y a aussi des fonctionnalités intéressantes comme les appareils de test.

2

Votre fichier de paramètres Django doit avoir été chargé avant de pouvoir importer vos modèles. Si vous ne pouvez pas utiliser le framework de test de Django, alors peut-être que vous pouvez utiliser ce code dans vos tests:

from django.conf import settings 
settings.configure(
     DATABASE_ENGINE='postgresql_psycopg2', 
     DATABASE_NAME='FOO', 
     DATABASE_USER='username', 
     DATABASE_PASSWORD='password', 
     DATABASE_HOST='localhost', 
     DATABASE_PORT='5432', 
     INSTALLED_APPS=('foo',) 

)

ou, si vous n'avez pas besoin d'être si explicite, vous peut probablement faire ceci:

import django.core.management 
from foo import settings 
django.core.management.setup_environ(settings) 
2

Vous devriez être en mesure de définir la variable d'environnement DJANGO_SETTINGS_MODULE = myapp.settings et que ce travail soit pour les scripts autonomes.

sous Linux/bash vous feriez: export DJANGO_SETTINGS_MODULE = myapp.settings

Questions connexes