Подтвердить что ты не робот

Есть ли простой способ получить групповые имена пользователя в Django

Я пробовал следующий код с помощью django.contrib.auth.User и django.contrib.auth.Group

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

Но это не удалось, и я получил следующую Ошибка:

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

Спасибо за любую помощь!

4b9b3361

Ответ 1

Вы можете получить группы пользователей с помощью request.user.groups.all(), который вернет QuerySet. И тогда вы можете превратить этот объект в список, если хотите.

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

или с недавним Джанго

l = request.user.groups.values_list('name',flat = True) # QuerySet Object
l_as_list = list(l)                                     # QuerySet to 'list'

Ответ 2

Это лучше

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

else:
    # Action if not existing

Ответ 3

user.groups.all()[0].name == "groupname"

Ответ 4

Возможно, это слишком поздно (я только что присоединился к stackoverflow), но для тех, кто ищет в Google это в начале 2018 года, вы можете использовать тот факт, что объект групп django (по умолчанию) имеет следующие поля (не исчерпывающие, только важные). ):

идентификатор, имя, права доступа, пользователь (может иметь много пользователей; ManyToMany)

Обратите внимание, что группа может состоять из множества пользователей, и пользователь может быть членом многих групп. Таким образом, вы можете просто отфильтровать модель групп django для текущего сеанса пользователя (убедитесь, что вы добавили соответствующие группы и назначили пользователя для его/ее групп/групп):

'''
This assumes you have set up django auth properly to manage user logins
'''
# import Group models
from django.contrib.auth.models import Group

# filter the Group model for current logged in user instance
query_set = Group.objects.filter(user = request.user)

# print to console for debug/checking
for g in query_set:
    # this should print all group names for the user
    print(g.name) # or id or whatever Group field that you want to display