2010-12-07 11 views
0

Je ne reçois pas de python manage.py syncdb pour créer des tables pour mes modèles; c'est apparemment parce qu'une exception est levée sur la tentative d'importation de mes modèles et je suis un peu perplexe par l'exception:python manage.py syncdb ne tire pas de models.py

[email protected] ~/project 
$ python manage.py shell 
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01) 
[GCC 4.3.4 20090804 (release) 1] on cygwin 
Type "help", "copyright", "credits" or "license" for more information. 
(InteractiveConsole) 
>>> import models 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/home/jhayward/project/models.py", line 23, in <module> 
    class architecture(models.Model): 
    File "/usr/lib/python2.6/site-packages/django/db/models/base.py", line 48, in 
__new__ 
    kwargs = {"app_label": model_module.__name__.split('.')[-2]} 
IndexError: list index out of range 
>>> 

modèles Importation comme django.db.models sans fioritures ne permet pas. Le fichier models.py se trouve dans le même répertoire que celui que j'essaie d'importer. il ne semble pas se comporter différemment quand j'ajoute le répertoire courant à mon PYTHONPATH.

Que se passe-t-il dans ce message d'erreur et que dois-je faire pour l'aider?

La structure de base du models.py est:

from django.db import models 

example_choice = (
    (0, u'first choice'), 
    (1, u'second choice'), 
    ) 

[more such choices] 

class architecture(models.Model):             
    name = models.TextField(null = True, blank = True) 

[more such classes, with more fields and some interconnections but no more sophisticated syntax] 
+1

quoi sur la ligne 23 dans models.py? – baloo

+0

post your models.py –

+0

architecture de classe (models.Model): [J'ai essayé un 'A' initial par pylint, mais cela a eu la même erreur; la définition de la classe est piétonne autant que je peux dire.] – JonathanHayward

Répondre

3

Vous devez disposer d'un package d'application (par exemple myapp) et les modèles doivent s'y trouver (myapp/models.py) Ensuite, vous pouvez importer myapp.models ou myapp import models.

L'erreur est due au fait que django essaie de trouver l'appname comme le paquet contenant le module models (le chemin vers le module models doit au moins avoir 2 niveaux de profondeur).

En outre, l'application doit être déclarée dans INSTALLED_APPS

+0

"En outre, l'application doit être déclarée dans INSTALLED_APPS": C'était mon problème. Je vous remercie. – JonathanHayward

1

Les modèles doivent être contenus dans une application, pas dans le projet directement.

Questions connexes