Question

Ma deuxième question du jour: mon projet Django avec quatre applications installées. Lorsque j'exécute manage.py syndb, il ne crée de tables que pour deux d'entre elles. À ma connaissance, aucun de mes fichiers de modèles ne pose de problèmes et toutes les applications sont spécifiées dans INSTALLED_APPS dans mon fichier de paramètres. Manage.py syndb semble simplement ignorer deux de mes applications.

Ce qui est unique à propos des deux "ignoré" apps est que les fichiers de modèles importent les modèles des deux autres applications et les utilisent comme clés étrangères (je ne sais pas si c'est une bonne ou une mauvaise pratique, mais m'aide à rester organisé). Je ne pense pas que ce soit le problème cependant, car j'ai commenté les modèles contenant des clés étrangères et les tables n'ont toujours pas été créées. Je suis perplexe.

UPDATE: lorsque je commente les lignes qui importent des fichiers de modèles à partir d'autres applications, syndb crée mes tableaux. Peut-être que je ne comprends pas quelque chose sur la relation entre les fichiers de modèles dans des applications séparées et d'autres. Je pensais qu'il était correct d'utiliser un modèle d'une autre application comme clé étrangère en l'important simplement. Pas vrai?

Était-ce utile?

La solution

Malheureusement, manage.py ne parvient pas à charger une application en l'absence d'une erreur d'importation dans le fichier models.py ( billet n ° 10706 ). Il y a des chances qu'il y ait une faute de frappe dans l'un de vos fichiers models.py ... vérifiez toutes les instructions d'importation (ou utilisez pylint).

Récemment, syncdb a cessé de charger deux de mes applications et sqlall m'a signalé l'erreur "L'application avec l'étiquette foo était introuvable". Ne sachant pas que cela signifiait parfois qu'une application avec une étiquette foo avait été trouvée mais qu'elle ne pouvait pas être chargée en raison de la remontée d'ImportError, il m'a fallu une demi-heure pour comprendre que j'essayais d'importer 'haslib' au lieu de 'hashlib' dans un de mes fichiers models.py.

Autres conseils

Je pense avoir rencontré quelque chose de similaire.

J'ai eu un problème lorsqu'un modèle n'a pas été réinitialisé. Dans ce cas, il s’est avéré qu’il y avait une erreur dans mes modèles qui n’était pas crachée.

Bien que je pense que syncdb, une fois exécuté, crache une sorte d'erreur.

Dans tous les cas, essayez d'importer votre fichier de modèle à partir du shell et voyez si vous le pouvez.

$ manage.py shell
>>> from myapp import models
>>>

En cas d'erreur dans le fichier, cela devrait être signalé.

Selon votre mise à jour, il semble que vous ayez un problème d'importation croisée. Au lieu de:

from app1.models import X

class ModelA(models.Model):
    fk = models.ForeignKey(X)

Essayez:

class ModelA(models.Model):
    fk = models.ForeignKey("app1.X")

... bien que je pense que vous devriez avoir une erreur sur syncdb.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top