Para colocar mis modelos en subcarpetas, traté de usar el campo Meta de app_label como se describe en here.¿Modelo en el subdirectorio mediante app_label?
Mi estructura de directorios es el siguiente:
- proyecto
- aplicaciones
- foo
- modelos
- __init_ _.py
- bar_model.py
- modelos
- foo
- aplicaciones
En bar_model.py defino mi modelo como este:
from django.db import models
class SomeModel(models.Model):
field = models.TextField()
class Meta:
app_label = "foo"
me puede importar con éxito el modelo como ese:
from apps.foo.models.bar_model import SomeModel
Sin embargo, en ejecución:
./manage.py syncdb
no crea la tabla para el modelo. En el modo detallado, veo, sin embargo, que la aplicación "foo" se reconoce correctamente (está en INSTALLED_APPS en settings.py). Mover el modelo a models.py debajo de foo funciona.
¿Existe alguna convención específica no documentada con app_label o con todo el mecanismo que impide que syncdb reconozca esta estructura de modelo?
¡Exactamente! Ahora funciona. – nikola
¡Gracias! Sí, tendrás que importarlos a '__init __. Py' y darles una' app_label' a través de la clase 'Meta' del modelo. –
Importante la adición de @mustafa.0x usted * debe * proporcionar la misma etiqueta_aplicación que el nombre de etiqueta que proporciona como nombre de módulo o la que proporciona en el registro AppConfig si no devuelve un OrderedDict vacío() si obtiene apps.get_app_config ('app_label'). modelos después de importar django.apps.apps – danigosa