我在Django的管理网站中创建了一个自定义组。
在我的代码中,我想检查用户是否在该组中。我怎么做?
你只需通过上的groups属性即可访问组User。
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>]。
user.groups.all()
[<Group: Editor>]
另外,更直接地,你可以通过以下方式检查用户是否在组中:
if django_user.groups.filter(name = groupname).exists(): ...
注意,groupname它也可以是实际的Django组对象。
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
希望有帮助