Django:我如何findORM知道的模型列表?
在Django中,有没有一个地方可以findORM知道的模型?
简单的scheme:
import django.apps django.apps.apps.get_models()
在Django 1.7之前,改为使用:
from django.db import models models.get_models(include_auto_created=True)
include_auto_created
参数可确保通过ManyToManyField
隐式创build的表也将被检索。
使用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())
如果你想玩,而不是使用好的解决scheme ,你可以玩一下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
注意:这是相当粗糙的一段代码; 它将假定所有模型都在“models.py”中定义,并且它们从django.db.models.Modelinheritance。
如果您使用contenttypes应用程序,则很简单: http ://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/
如果您使用pipe理员应用程序注册模型,则可以在pipe理文档中查看这些类的所有属性。