97 votes

Django: Comment trouver une liste de modèles que l'ORM connaît?

Dans Django, y a-t-il un endroit où je peux obtenir une liste ou consulter les modèles que l'ORM connaît?

190voto

Daniel Roseman Points 199743

Solution simple:

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

vous donnera une liste de toutes les classes de modèle qui ont été chargées. Le paramètre include_auto_created garantit que les tables implicitement créées par ManyToManyField s seront également récupérées.

11voto

andreipak Points 41

Répertoriez les modèles à l'aide de 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())
 

4voto

Roberto Liffredo Points 15265

Si vous voulez jouer sans utiliser la bonne solution , vous pouvez jouer un peu avec l'introspection en 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
 

Remarque: ceci est un morceau de code assez approximatif; cela supposera que tous les modèles sont définis dans "models.py" et qu'ils héritent de django.db.models.Model.

1voto

dar Points 4508

Si vous utilisez l'application contenttypes, la procédure est simple: http://docs.djangoproject.com/en/dev/ref/contrib/contenttypes/

0voto

Technical Bard Points 1493

Si vous enregistrez vos modèles avec l'application d'administration, vous pouvez voir tous les attributs de ces classes dans la documentation de l'administrateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X