Python 如何在Django中以编程方式批准所有已安装的应用权限

Python 如何在Django中以编程方式批准所有已安装的应用权限,python,django,django-permissions,Python,Django,Django Permissions,settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.sites',

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',

    # Local apps
    'users.apps.UsersConfig',

    # Third party apps
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
]

@user_passes_test(lambda u: u.is_superuser)
def create_group(request):
    groups = Group.objects.all()
    if request.method == 'POST':
        group_name = request.POST.get('group_name')
        group = Group.objects.create(name=group_name)
        return HttpResponse(group.name)
    else:
        ctx = {'groups': groups}
        return render(request, 'users/admin/create_group.html', ctx)
views.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',

    # Local apps
    'users.apps.UsersConfig',

    # Third party apps
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
]

@user_passes_test(lambda u: u.is_superuser)
def create_group(request):
    groups = Group.objects.all()
    if request.method == 'POST':
        group_name = request.POST.get('group_name')
        group = Group.objects.create(name=group_name)
        return HttpResponse(group.name)
    else:
        ctx = {'groups': groups}
        return render(request, 'users/admin/create_group.html', ctx)
在这里,我创建了一个视图,用于以编程方式创建用户组。现在我想允许用户像django管理仪表板一样批准权限。如选择少数权限,然后按“提交”按钮将这些权限添加到所选组。
一定有办法做到这一点,因为django管理员本身就是这样做的。我想了解一些如何完成这项工作的想法。

Django通过与之间的
ManyToManyField
来实现这一点。
Permission
对象使用
content\u type
字段来引用指定所有模型的

因此,如果要将具有给定
代码名的权限添加到
,可以使用:

from django.contrib.auth.models import Permission

permission = Permission.odocumentenbjects.get(codename='add_mymodel')

mygroup.permissions.add(permission)
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType

permissions = Permission.objects.filter(
    content_type=ContentType.objects.get_for_model(Foo)
)

mygroup.permissions.add(*permissions)
您还可以创建额外的权限,就像您为另一个模型创建对象一样,并将这些对象添加到组中

您还可以通过以下方式添加所有权限:

from django.contrib.auth.models import Permission

permissions = Permission.objects.all()

mygroup.permissions.add(*permissions)
来自django.contrib.auth.models导入权限
permissions=Permission.objects.all()

mygroup.permissions.add(*permissions)
嘿,我真的很喜欢这种方法。但是我想列出项目中的所有可用权限(不是单个模型,而是项目中的所有模型),然后将它们添加到组中。如何获取所有已安装应用的所有权限?@TareqMonwer:您使用
Permission.objects.all()