2010-02-11 15 views
24

Ich habe versucht, mit Hilfe der django.contrib.auth.User und django.contrib.auth.Group folgenden Code zu bekommengibt es eine einfache Gruppennamen eines Benutzers in django

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

Aber das scheiterte, und ich erhielt folgende Fehler:

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 

Vielen Dank für jede Hilfe!

Antwort

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

oder mit den letzten django

l = request.user.groups.values_list('name',flat=True) 
+0

funktioniert wie ein Charme! – icn

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

Wie ist das relevant für die Frage? – Aaron

+0

Richtig, nicht relevant für die aktuelle Frage, aber es hat anderen geholfen, die Gruppe mit einem bestimmten Namen zu bekommen. –

5

Das ist besser

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

else: 
    # Action if not existing 
1

Dies ist wahrscheinlich bisschen etwas zu spät (ich Stackoverflow nur beigetreten sind), sondern für alle, die googeln dies im Frühjahr 2018, können Sie die Tatsache, dass Django Groups-Objekt (standardmäßig) kommt mit den folgenden Feldern (nicht erschöpfend, nur den Import) verwenden Ameise):

ID, Name, Berechtigungen, Benutzer (kann viele Benutzer haben; ManyToMany)

Beachten Sie, dass eine Gruppe aus vielen Benutzern bestehen kann und ein Benutzer ein Mitglied von vielen Gruppen sein kann. So können Sie einfach auswählen, die django Gruppen Modell für den aktuellen Benutzer-Sitzung (stellen Sie sicher, dass Sie die entsprechenden Gruppen hinzugefügt haben und den Benutzer zu seiner/ihrer Gruppe/s vergeben):

''' 
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 
Verwandte Themen