首页 > 解决方案 > 使用 django 中的模型和权限过滤所有已安装的应用程序

问题描述

我想显示所有已安装的应用程序和模型的列表以及他们的权限。

例如

app_name_1
   model_name_1
     permission_1
     permission_2
     ...........
   model_name_2
     permission_1
     permission_2
     ...........
app_name_2
   model_name_1
     permission_1
     permission_2
     ...........
   model_name_2
     permission_1
     permission_2
     ...........
and so on.

标签: djangopermissions

解决方案


您可以获得已安装应用程序的列表(不包括 Django 默认值):

from django.apps import apps
from django.conf import settings
from django.contrib.auth.models import Permission

apps_list = [app for app in settings.INSTALLED_APPS if not 'django' in app]

然后获取所有模型:

models = []
for app in apps_list:
    models.append(apps.all_models[app])

接下来实际上是获得权限:

for model in models:
    app_lbl = model._meta.app_label
    model_name = model._meta.model_name
    permissions = Permission.objects.filter(content_type__app_label=app_lbl, content_type__model=model_name)

推荐阅读