2010-03-19 21 views
14

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

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?

Respuesta

18

entradas Ver Django #10985: Explain how models can be organised in a directory

Puede ser que usted no está importando sus modelos en __init__.py?

+0

¡Exactamente! Ahora funciona. – nikola

+2

¡Gracias! Sí, tendrás que importarlos a '__init __. Py' y darles una' app_label' a través de la clase 'Meta' del modelo. –

+0

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

3

syncdb no creará tablas para los modelos que no se encuentran en <appname>.models, así que impórtelos allí, p. Ej. from apps.foo.models import SomeModel.

+0

No, eso tampoco funciona, es decir, syncdb no recupera SomeModel. – nikola

+0

EDITAR: Ahora me doy cuenta de que apuntaba en la misma dirección que Van Gale. He marcado su respuesta correcta porque también contiene un enlace a la discusión sobre la documentación adecuada de app_label. – nikola

Cuestiones relacionadas