For anyone on Django 1.9, it is now supported by the framework without defining the class meta data.
https://docs.djangoproject.com/en/1.9/topics/db/models/#organizing-models-in-a-package
NOTE: For Django 2, it’s still the same
The
manage.py startapp
command creates an application structure that includes a models.py file. If you have many models, organizing them in separate files may be useful.To do so, create a models package. Remove models.py and create a
myapp/models/
directory with an__init__.py
file and the files to store your models. You must import the models in the__init__.py
file.
So, in your case, for a structure like
app1/
views.py
__init__.py
models/
__init__.py
model1.py
model2.py
app2/
views.py
__init__.py
models/
__init__.py
model3.py
model4.py
You only need to do
#myproject/app1/models/__init__.py:
from .model1 import Model1
from .model2 import Model2
#myproject/app2/models/__init__.py:
from .model3 import Model3
from .model4 import Model4
A note against importing all the classes:
Explicitly importing each model rather than using
from .models import *
has the advantages of not cluttering the namespace, making code more readable, and keeping code analysis tools useful.