2010-02-11 16 views
24

Probé siguiente código con la ayuda de la django.contrib.auth.User y django.contrib.auth.Groupno es un simple para obtener los nombres de grupos de un usuario en Django

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

Pero esto falló y me recibieron siguiente 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 

Gracias por cualquier ayuda!

Respuesta

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

o con la reciente Django

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

funciona como un encanto! – icn

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

¿Qué importancia tiene esto para la pregunta? – Aaron

+0

Es cierto que no es relevante para la pregunta actual, pero ha ayudado a otros a obtener el nombre específico del grupo. –

5

Esto es mejor

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

else: 
    # Action if not existing 
1

Este bit es probablemente poco demasiado tarde (Me he unido a stackoverflow), pero para cualquier persona buscando en Google esto a principios de 2018, puede usar el hecho de que el objeto Grupos django (por defecto) viene con los siguientes campos (no exhaustivo, solo la importación ant):

id, nombre, permisos, usuario (puede tener muchos usuarios; ManyToMany)

Tenga en cuenta que un grupo puede constar de muchos usuarios y un usuario puede ser miembro de muchos grupos. Así que usted puede simplemente realizar un filtrado del Grupos django modelo para el usuario actual de la sesión (asegúrese de haber añadido los grupos pertinentes y asignado al usuario a su/su grupo/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 
Cuestiones relacionadas