Django get list of models in application


So, i have a file in MyApp folder:

from django.db import models
class Model_One(models.Model):
class Model_Two(models.Model):

It can be about 10-15 classes. How to find all models in the MyApp and get their names?

Since models are not iterable, I don't know if this is even possible.

9/10/2018 10:58:16 AM

Accepted Answer


for newer versions of Django check Sjoerd answer below

Original answer from 2012: This is the best way to accomplish what you want to do:

from django.db.models import get_app, get_models

app = get_app('my_application_name')
for model in get_models(app):
    # do something with the model

In this example, model is the actual model, so you can do plenty of things with it:

for model in get_models(app):
    new_object = model() # Create an instance of that model
    model.objects.filter(...) # Query the objects of that model
    model._meta.db_table # Get the name of the model in the database
    model._meta.verbose_name # Get a verbose name of the model
    # ...
1/23/2018 4:31:50 AM

From Django 1.7 on, you can use this code, for example in your to register all models:

from django.apps import apps
from django.contrib import admin
from django.contrib.admin.sites import AlreadyRegistered

app_models = apps.get_app_config('my_app').get_models()
for model in app_models:
    except AlreadyRegistered:

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow