Есть ли простой способ получить групповые имена пользователя в 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
Спасибо за любую помощь!
Ответы
Ответ 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