Есть ли простой способ получить групповые имена пользователя в Django - PullRequest
35 голосов
/ 11 февраля 2010

Я попробовал следующий код с помощью 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

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

Ответы [ 4 ]

76 голосов
/ 11 февраля 2010
for g in request.user.groups.all():
    l.append(g.name)

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

l = request.user.groups.values_list('name',flat=True)
12 голосов
/ 26 декабря 2016

Это лучше

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

else:
    # Action if not existing
7 голосов
/ 13 июня 2013
user.groups.all()[0].name == "groupname"
3 голосов
/ 03 февраля 2018

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

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

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

'''
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...