2009-07-14 4 views

Répondre

2

Si vous voulez jouer, et ne pas utiliser la good solution, vous pouvez jouer un peu avec l'introspection 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 : c'est un morceau de code assez grossier; il supposera que tous les modèles sont définis dans "models.py" et qu'ils héritent de django.db.models.Model.

132

solution simple:

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

Avant Django 1.7, utiliser à la place:

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

Le paramètre include_auto_created assure que, grâce à des tables implicitement créées par ManyToManyField s seront récupérés.

+2

En utilisant la même méthode que vous pouvez également obtenir tous les modèles dans une seule application: http://stackoverflow.com/a/8702854/117268 –

+0

'de django.apps. apps import get_models' produit 'ImportError: Aucun module nommé 'django.apps.apps'' ... une idée? – allanberry

+3

'à partir de django.apps importer apps' >>' apps.get_models' – Dingo

0

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

Questions connexes