Ajouter un utilisateur à un groupe dans django


139

Comment ajouter un utilisateur à un groupe dans django par le nom du groupe?

Je peux le faire:

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

Comment pourrais-je faire quelque chose comme ça:

user.groups.add(name='groupname') # add by name

Cette version de la solution est-elle sensible? Quand j'ai essayé, c'est django 1.8, j'ai eu "mot-clé inattendu: nom"
rschwieb

Réponses:


248

Recherchez le groupe à l'aide du modèle de groupe avec le nom du groupe, puis ajoutez l'utilisateur à 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)

17
Merci pour cela. Il semble idiot que certaines des choses les plus élémentaires soient manquantes ou difficiles à trouver dans la documentation django
Francis Yaconiello

1
docs.djangoproject.com/en/dev/intro/tutorial01 Il y a des exemples similaires dans la section 'Jouer avec l'API'
juankysmith

9
Le didacticiel est assez utile, ce que je voulais dire, c'est que je m'attendrais à voir dans une section de la documentation sous auth pour créer des groupes par programme. au lieu de cela, il n'y a qu'un paragraphe faible: docs.djangoproject.com/en/1.3/topics/auth/#groups Je suppose qu'il est utile de garder à l'esprit que les modèles d'authentification ne sont que des modèles réguliers et que la référence de modèle standard s'applique.
Francis Yaconiello

où est user_setdans Django doc? Je ne le trouve nulle part
Minh Thai

1
@MinhThai la valeur par défaut pour un champ de relation inverse est <content_type>_setquand related_namen'est pas défini sur le champ.
sox avec Monica

99

Voici comment faire cela dans les versions modernes de Django (testé dans Django 1.7):

from django.contrib.auth.models import Group
group = Group.objects.get(name='groupname')
user.groups.add(group)

1
vous pouvez aussi le faire Group.objects.get_by_natural_key('groupname'), mais cela ne le rend pas court-circuité: D
CpILL

2
@enchance Partout où vous devez le faire. Probablement dans le code d'une vue qui effectue des affectations de groupe.
coredumperror
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.