在Django中,如何检查用户是否在某个组中?

我在Django的pipe理站点中创build了一个自定义组。

在我的代码中,我想检查用户是否在这个组中。 我怎么做?

您只需通过User上的groups属性即可访问这些组。

 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>]

您的用户对象通过ManyToMany关系链接到对象。

您可以从而将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装饰器一起使用,以pipe理对视图的访问:

 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 

希望这个帮助

如果您需要组中的用户列表,则可以这样做:

 from django.contrib.auth.models import Group users_in_group = Group.objects.get(name="group name").user_set.all() 

然后检查

  if user in users_in_group: # do something 

检查用户是否在组中。

如果你不需要现场的用户实例(就像我一样),你可以做到这一点

 User.objects.filter(pk=userId, groups__name='Editor').exists() 

这将只对数据库产生一个请求并返回一个布尔值。

如果用户属于某个组,可以使用以下命令在django模板中进行检查:

{% if group in request.user.groups.all %} "some action" {% endif %}

你只需要一行:

 from django.contrib.auth.decorators import user_passes_test @user_passes_test(lambda u: u.groups.filter(name='companyGroup').exists()) def you_view(): return HttpResponse("Since you're logged in, you can see this text!") 

以防万一,如果你想检查用户的组属于一个预定义的组列表:

 def is_allowed(user): allowed_group = set(['admin', 'lead', 'manager']) usr = User.objects.get(username=user) groups = [ x.name for x in usr.groups.all()] if allowed_group.intersection(set(groups)): return True return False 

在一行中:

 'Groupname' in user.groups.values_list('name', flat=True) 

这是评估为TrueFalse