Agregar un usuario a un grupo en django

139

¿Cómo agregaría un usuario a un grupo en django por el nombre del grupo?

Puedo hacer esto:

user.groups.add(1) # add by id

¿Cómo haría algo como esto?

user.groups.add(name='groupname') # add by name
David542
fuente
¿Es sensible esta versión de la solución? Cuando probé esto es django 1.8, obtuve "palabra clave inesperada: nombre"
rschwieb

Respuestas:

248

Encuentre el grupo usando el modelo de grupo con el nombre del grupo, luego agregue el usuario a user_set

from django.contrib.auth.models import Group
my_group = Group.objects.get(name='my_group_name') 
my_group.user_set.add(your_user)
juankysmith
fuente
17
Gracias por esto. Parece una tontería que algunas de las cosas más básicas faltan o son difíciles de encontrar en los documentos de
Django
1
docs.djangoproject.com/en/dev/intro/tutorial01 Hay ejemplos similares en la sección 'Jugar con la API'
juankysmith
9
El tutorial es bastante útil, lo que quise decir es que esperaría ver en una sección de los documentos bajo autenticación para crear grupos mediante programación. en cambio, todo lo que hay es un párrafo débil: docs.djangoproject.com/en/1.3/topics/auth/#groups Supongo que ayuda tener en cuenta que los modelos de autenticación son solo modelos normales, y se aplica la referencia de modelo estándar.
Francis Yaconiello
¿Dónde está user_seten Django doc? No puedo encontrarlo en ninguna parte
Minh Thai
1
@MinhThai el valor predeterminado para un campo de relación inversa es <content_type>_setcuando related_nameno está configurado en el campo.
Medias con Mónica
99

Aquí se explica cómo hacer esto en versiones modernas de Django (probado en Django 1.7):

from django.contrib.auth.models import Group
group = Group.objects.get(name='groupname')
user.groups.add(group)
coredumperror
fuente
1
también puede hacerlo Group.objects.get_by_natural_key('groupname'), pero no lo
acorta
2
@enchance Donde sea que necesites hacerlo. Probablemente dentro del código para una vista que está haciendo asignaciones de grupo.
coredumperror