Modèle dans le sous-répertoire via app_label?
-
21-09-2019 - |
Question
Afin de placer mes modèles dans les sous-dossiers que j'ai essayé d'utiliser le champ Meta app_label comme décrit ici .
Ma structure de répertoire ressemble à ceci:
- projet
- applications
- foo
- modèles
- __ __ initialisation. Py
- bar_model.py
- modèles
- foo
- applications
Dans bar_model.py je définis mon modèle comme ceci:
from django.db import models
class SomeModel(models.Model):
field = models.TextField()
class Meta:
app_label = "foo"
Je peux importer avec succès le modèle comme ceci:
from apps.foo.models.bar_model import SomeModel
Cependant, en cours d'exécution:
./manage.py syncdb
ne crée pas la table pour le modèle. En mode bavard je ne vois cependant que l'application « foo » est correctement reconnu (il est en INSTALLED_APPS dans settings.py). Déplacement du modèle à models.py sous foo fonctionne.
Y at-il une convention spécifique non documenté avec app_label ou avec tout le mécanisme qui empêche cette structure de modèle d'être reconnu par syncdb?
La solution
Voir billet Django # 10985: Expliquer comment les modèles peuvent être organisés dans un répertoire
Il se peut que vous n'êtes pas importer vos modèles en __init__.py
?
Autres conseils
syncdb
ne va pas créer des tables pour les modèles ne sont pas situés dans <appname>.models
, donc importer là-dedans, par exemple from apps.foo.models import SomeModel
.