2010-02-11 14 views
24

Próbowałem następujący kod z pomocą django.contrib.auth.User i django.contrib.auth.Groupistnieje proste, aby uzyskać nazwy grup użytkownika w django

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

Ale to nie powiodło i otrzymałem następujące błąd:

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 

dzięki za pomoc!

Odpowiedz

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

lub z niedawnym Django

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

działa jak marzenie! – icn

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

Jak to jest istotne dla pytania? – Aaron

+0

To prawda, że ​​nie odnosi się do bieżącego pytania, ale pomogło innym uzyskać grupę o określonej nazwie. –

5

Jest lepiej

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

else: 
    # Action if not existing 
1

Jest to prawdopodobnie tad nieco zbyt późno (ja właśnie dołączył stackoverflow), ale dla każdego, kto googlowania dla na początku 2018 roku możesz użyć faktu, że obiekt grupy Django (domyślnie) zawiera następujące pola (nie wyczerpujące, tylko import mrówki te):

id, nazwa, uprawnienia, użytkownik (może mieć wielu użytkowników; ManyToMany)

Należy pamiętać, że grupa może składać się z wielu użytkowników, a użytkownik może należeć do wielu grup. Tak po prostu można filtrować django Groups Model dla bieżącego użytkownika sesji (upewnij się, że zostały dodane przez odpowiednie grupy i przypisać użytkownika do jego/jej grupa/s):

''' 
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 
Powiązane problemy