In order to place my models in sub-folders I tried to use the app_label Meta field as described here.
My directory structure looks like this:
- project
- apps
- foo
- models
- __init__.py
- bar_model.py
- models
- foo
- apps
In bar_model.py I define my Model like this:
from django.db import models
class SomeModel(models.Model):
field = models.TextField()
class Meta:
app_label = "foo"
I can successfully import the model like so:
from apps.foo.models.bar_model import SomeModel
However, running:
./manage.py syncdb
does not create the table for the model. In verbose mode I do see, however, that the app "foo" is properly recognized (it's in INSTALLED_APPS in settings.py). Moving the model to models.py under foo does work.
Is there some specific convention not documented with app_label or with the whole mechanism that prevents this model structure from being recognized by syncdb?
syncdb
will not create tables for models not located in<appname>.models
, so import it in there, e.g.from apps.foo.models import SomeModel
.See Django ticket #10985: Explain how models can be organised in a directory
It may be that you aren't importing your models into
__init__.py
?