web-dev-qa-db-ja.com

djangoでユーザーのグループ名を取得する簡単な方法はありますか

Django.contrib.auth.UserDjango.contrib.auth.Groupの助けを借りてコードを追おうとしました

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

しかし、それは失敗し、次の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

助けてくれてありがとう!

37
icn

QuerySetを返すrequest.user.groups.all()でユーザーのグループを取得できます。必要に応じて、そのオブジェクトをリストに変換できます。

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

または最近のDjangoで

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

これの方が良い

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

else:
    # Action if not existing
12
user.groups.all()[0].name == "groupname"
8
Kishor Pawar

これはおそらく少し遅すぎます(私はstackoverflowに参加しました)が、2018年の初めにこれをグーグルで探している人は、Django Groupsオブジェクト(デフォルト))が次のものに付属しているという事実を使用できますフィールド(網羅的ではなく、重要なフィールドのみ):

iD、名前、権限、ユーザー(多くのユーザーを含めることができます; 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
3
aaronlhe