2015-04-20 2 views
15

J'utilise ce code dans mon admin.pyComment puis-je obtenir tous les modèles de django 1.8

from django.db.models import get_models, get_app 

for model in get_models(get_app('myapp')): 
    admin.site.register(model) 

mais je reçois d'avertissement que get_models is deprecated

Comment puis-je faire dans django 1.8

+0

C'est un avertissement. Est-ce activement * vous interdisant d'obtenir le résultat des modèles? Je ne m'attendrais pas à un avertissement pour le faire sauf pour vous informer que cette approche va disparaître dans une future version de Django. – Makoto

+3

@Makoto il est dit qu'il sera supprimé en 1.9. Je pensais qu'il serait préférable d'utiliser les dernières choses plutôt que de le chnage dans quelques mois à nouveau – user3214546

+0

Ceci est une raison tout à fait rationnelle de vouloir migrer; Cependant, la lecture de votre question est que vous avez du mal à récupérer les valeurs de cette commande. Ce qui m'inquiétait, c'est que cela vous interdisait d'obtenir des renseignements, ce qui aurait été contre-intuitif. – Makoto

Répondre

32

Cette devrait fonctionner,

from django.apps import apps 
apps.get_models() 

La méthode get_models ret urs une liste de tous les modèles installés. Vous pouvez également transmettre trois arguments de mot clé include_auto_created, include_deferred et include_swapped.

Si vous voulez obtenir les modèles pour une application spécifique, vous pouvez faire quelque chose comme ça.

from django.apps import apps 
myapp = apps.get_app_config('myapp') 
myapp.models 

Ceci retournera une instance OrderedDict des modèles pour cette application.

+0

merci, comment puis-je obtenir des modèles de 'myapp' seulement – user3214546

+0

J'ai essayé cela pour enregistrer le site admin comme' admin.site.register (myapp.models [0]) 'mais je reçois cet objet '' str 'n'a aucun attribut' _meta'' – user3214546

+1

C'est parce qu'il renvoie une instance 'OrderedDict'. Vous voulez appeler 'myapp.models.values ​​()'. –