你只需通过上的groups
属性即可访问组User
。
from django.contrib.auth.models import User, Group
group = Group(name = "Editor")
group.save() # save this new group for this example
user = User.objects.get(pk = 1) # assuming, there is one initial user
user.groups.add(group) # user is Now in the "Editor" group
然后user.groups.all()
返回[<Group: Editor>]
。
另外,更直接地,你可以通过以下方式检查用户是否在组中:
if django_user.groups.filter(name = groupname).exists():
...
注意,groupname
它也可以是实际的Django
组对象。
你的User对象通过ManyToMany关系链接到Group对象。
因此,你可以将filter方法应用于user.groups。
因此,要检查给定的用户是否在某个组中(示例为“成员”),只需执行以下操作:
def is_member(user):
return user.groups.filter(name='Member').exists()
如果要检查给定用户是否属于多个给定组,请使用__in运算符,如下所示:
def is_in_multiple_groups(user):
return user.groups.filter(name__in=['group1', 'group2']).exists()
请注意,这些功能可以与@user_passes_test装饰器一起使用,以管理对视图的访问:
from django.contrib.auth.decorators import login_required, user_passes_test
@login_required
@user_passes_test(is_member) # or @user_passes_test(is_in_multiple_groups)
def myview(request):
# Do your processing
希望有帮助