is there a simple way to get group names of a user in django


Question

I tried following Code with the help of the django.contrib.auth.User and django.contrib.auth.Group

for g in request.user.groups:
    l.append(g.name)

But that failed and I received following Error:

TypeError at /
'ManyRelatedManager' object is not iterable
Request Method: GET
Request URL:    http://localhost:8000/
Exception Type: TypeError
Exception Value:    
'ManyRelatedManager' object is not iterable
Exception Location: C:\p4\projects\...\users.py in permission, line 55

Thanks for any help!

1
37
1/14/2019 10:41:14 AM

Accepted Answer

You can get the groups of a user with request.user.groups.all(), which will return a QuerySet. And then you can turn that object into a list if you want.

for g in request.user.groups.all():
    l.append(g.name)

or with recent Django

l = request.user.groups.values_list('name',flat = True) # QuerySet Object
l_as_list = list(l)                                     # QuerySet to `list`
79
7/24/2019 6:25:49 PM

This is better

if user.groups.filter(name='groupname').exists():
    # Action if existing

else:
    # Action if not existing

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon