Django: come posso trovare un elenco di modelli che l’ORM conosce?

In Django, c’è un posto in cui posso ottenere un elenco o cercare i modelli che l’ORM conosce?

Soluzione semplice:

import django.apps django.apps.apps.get_models() 

Prima di Django 1.7, usa invece:

 from django.db import models models.get_models(include_auto_created=True) 

Il parametro include_auto_created garantisce che vengano recuperate anche attraverso le tabelle create implicitamente da ManyToManyField .

Elenca modelli usando http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/

 from django.contrib.contenttypes.models import ContentType for ct in ContentType.objects.all(): m = ct.model_class() print "%s.%s\t%d" % (m.__module__, m.__name__, m._default_manager.count()) 

Se vuoi giocare, e non usare la buona soluzione , puoi giocare un po ‘con l’introspezione di Python:

 import settings from django.db import models for app in settings.INSTALLED_APPS: models_name = app + ".models" try: models_module = __import__(models_name, fromlist=["models"]) attributes = dir(models_module) for attr in attributes: try: attrib = models_module.__getattribute__(attr) if issubclass(attrib, models.Model) and attrib.__module__== models_name: print "%s.%s" % (models_name, attr) except TypeError, e: pass except ImportError, e: pass 

Nota: questo è un bel pezzo di codice; supporrà che tutti i modelli siano definiti in “models.py” e che ereditino da django.db.models.Model.

Se usi l’app contenttypes, allora è semplice: http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/

Se registri i tuoi modelli con l’app di amministrazione, puoi vedere tutti gli attributi di queste classi nella documentazione di amministrazione.