Django获取应用程序中的模型列表

所以,我在MyApp文件夹中有个models.py文件:

from django.db import models class Model_One(models.Model): ... class Model_Two(models.Model): ... ... 

它可以是大约10-15个class。 如何在MyApp中find所有模型并获取他们的名字?

由于模型是不可迭代的,我不知道这是否是可能的。

这是完成你想要做的最好的方法:

 from django.db.models import get_app, get_models app = get_app('my_application_name') for model in get_models(app): # do something with the model 

在这个例子中, model是实际的模型,所以你可以做很多事情:

 for model in get_models(app): new_object = model() # Create an instance of that model model.objects.filter(...) # Query the objects of that model model._meta.db_table # Get the name of the model in the database model._meta.verbose_name # Get a verbose name of the model # ... 

UPDATE

为更新版本的Django检查下面的Sjoerd答案

从Django 1.7开始,您可以使用此代码,例如在您的admin.py中注册所有模型:

 from django.apps import apps from django.contrib import admin from django.contrib.admin.sites import AlreadyRegistered app_models = apps.get_app_config('my_app').get_models() for model in app_models: try: admin.site.register(model) except AlreadyRegistered: pass 

我发现从一个应用程序获得所有模型的最佳答案:

 from django.apps import apps apps.all_models['<app_name>'] #returns dict with all models you defined 

另一种方法是使用内容types 。

INSTALLED_APPS中的每个应用程序的每个模型都会在ContentType模型中获得一个条目。 例如,这允许你有一个外键模型。

 >>> from django.contrib.contenttypes.models import ContentType >>> ContentType.objects.filter(app_label="auth") <QuerySet [<ContentType: group>, <ContentType: permission>, <ContentType: user>]> >>> [ct.model_class() for ct in ContentType.objects.filter(app_label="auth")] [<class 'django.contrib.auth.models.Group'>, <class 'django.contrib.auth.models.Permission'>, <class 'django.contrib.auth.models.User'>] 

这里有一个使用dumpdatajq的快速而不干净的解决scheme:

 python manage.py dumpdata oauth2_provider | jq -r '.[] | .model' | uniq 

您也可以清理jq命令以获得您喜欢的格式。


奖励:您可以通过向uniq添加-c标志来查看不同types对象的计数。