186 votes

Ajout d'un utilisateur à un groupe dans django

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 puis-je faire quelque chose comme ça :

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

0 votes

Cette solution est-elle sensible à la version ? Quand j'ai essayé avec django 1.8, j'ai obtenu "unexpected keyword : name" (mot-clé inattendu : nom).

350voto

juankysmith Points 2589

Trouver le groupe en utilisant le modèle Group avec le nom du groupe, puis ajouter l'utilisateur au 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)

33 votes

Merci pour cela. Il semble idiot que certaines des choses les plus fondamentales soient soit absentes, soit difficiles à trouver dans la documentation de Django.

1 votes

docs.djangoproject.com/fr/dev/intro/tutorial01 Vous trouverez des exemples similaires dans la section "Jouer avec l'API".

12 votes

Le tutoriel est assez utile, ce que je voulais dire c'est que je m'attendais à voir dans une section de la docs sous auth pour la création programmatique de groupes. au lieu de cela, tout ce qu'il y a est un faible paragraphe : docs.djangoproject.com/fr/1.3/topics/auth/#groups Je pense qu'il est utile de garder à l'esprit que les modèles authentiques sont des modèles ordinaires et que la référence au modèle standard s'applique.

137voto

CoreDumpError Points 634

Voici comment procéder 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 votes

Vous pouvez également faire Group.objects.get_by_natural_key('groupname') mais cela ne veut pas dire qu'il est court-circuité :D

2 votes

@enchance Partout où vous avez besoin de le faire. Probablement dans le code d'une vue qui effectue des affectations de groupe.

11voto

Coredumperror a raison, mais j'ai trouvé une chose que je dois partager, celle-là.

from django.contrib.auth.models import Group

# get_or_create return error due to 
new_group = Group.objects.get_or_create(name = 'groupName')
print(type(new_group))       # return tuple

new_group = Group.objects.get_or_create(name = 'groupName')
user.groups.add(new_group)   # new_group as tuple and it return error

# get() didn't return error due to 
new_group = Group.objects.get(name = 'groupName')
print(type(new_group))       # return <class 'django.contrib.auth.models.Group'>

user = User.objects.get(username = 'username')
user.groups.add(new_group)   # new_group as object and user is added

7 votes

C'est parce que get_or_create retourne un tuple : (object, created). new_group, created = Group.objects.get_or_create(name = 'groupName') fonctionnerait

0 votes

Oh c'est trop génial

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X