问题描述
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',]
views.py
@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-admin仪表板一样批准权限。就像选择几个权限,然后按提交按钮将这些权限添加到所选组中。 必须采取某种方式,因为django管理员本身就是这样做的。我想了解一些如何完成此工作的想法。
解决方法
Django通过在Group
和Permission
之间使用ManyToManyField
来实现此目的。 Permission
对象利用content_type
字段来引用指定所有模型的ContentType
model [Django-doc]。
如果因此要向codename
添加具有给定Group
的权限,则可以使用:
from django.contrib.auth.models import Permission
permission = Permission.odocumentenbjects.get(codename='add_mymodel')
mygroup.permissions.add(permission)
或者例如,如果您想添加给定模型 Foo
的所有权限,则可以使用:
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)