consultas - Django: ¿Cómo puedo encontrar una lista de modelos que el ORM conoce?
consultas avanzadas en django (5)
En Django, ¿hay algún lugar donde pueda obtener una lista o buscar los modelos que el ORM conoce?
Lista de modelos 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())
Si quieres jugar y no usar la buena solución , puedes jugar un poco con la introspección de 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: esta es una pieza bastante difícil de código; supondrá que todos los modelos están definidos en "models.py" y que heredan de django.db.models.Model.
Si registra sus modelos con la aplicación de administración, puede ver todos los atributos de estas clases en la documentación de administración.
Si usa la aplicación contenttypes, entonces es sencillo: http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/
Solución simple:
import django.apps
django.apps.apps.get_models()
Antes de Django 1.7, en su lugar use:
from django.db import models
models.get_models(include_auto_created=True)
El parámetro include_auto_created
asegura que también se recuperarán las tablas creadas implícitamente por ManyToManyField
s.