So, i have a file models.py 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.
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 # ...
From Django 1.7 on, you can use this code, for example in your admin.py 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: try: admin.site.register(model) except AlreadyRegistered: pass