Django.contrib.auth.UserとDjango.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
助けてくれてありがとう!
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`
これの方が良い
if user.groups.filter(name='groupname').exists():
# Action if existing
else:
# Action if not existing
user.groups.all()[0].name == "groupname"
これはおそらく少し遅すぎます(私は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