отфильтруйте все установленные приложения по их модели и разрешению в django - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу отобразить список всех установленных приложений и моделей, а также их разрешения.

например

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.

1 Ответ

1 голос
/ 10 февраля 2020

Вы можете получить список установленных приложений (исключая 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)
...