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
David542
la source
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)
juankysmith
la source
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)
coredumperror
la source
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