Hinzufügen eines Benutzers zu einer Gruppe in Django

139

Wie würde ich einen Benutzer mit dem Namen der Gruppe zu einer Gruppe in Django hinzufügen?

Ich kann dies tun:

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

Wie würde ich so etwas machen:

user.groups.add(name='groupname') # add by name
David542
quelle
Ist diese Lösungsversion sensibel? Als ich versuchte, dies ist Django 1.8, bekam ich "unerwartetes Schlüsselwort: Name"
rschwieb

Antworten:

247

Suchen Sie die Gruppe mithilfe des Gruppenmodells mit dem Namen der Gruppe und fügen Sie den Benutzer dem user_set hinzu

from django.contrib.auth.models import Group
my_group = Group.objects.get(name='my_group_name') 
my_group.user_set.add(your_user)
Juankysmith
quelle
17
Danke dafür. Es scheint albern, dass einige der grundlegendsten Dinge entweder fehlen oder schwer in den Django-Dokumenten zu finden sind
Francis Yaconiello
1
docs.djangoproject.com/de/dev/intro/tutorial01 Es gibt ähnliche Beispiele im Abschnitt 'Spielen mit der API'
Juankysmith
9
Das Tutorial ist ziemlich nützlich. Was ich damit gemeint habe, war, dass ich erwarten würde, dass es in einem Abschnitt der Dokumente unter auth zum programmgesteuerten Erstellen von Gruppen angezeigt wird. Stattdessen gibt es nur einen schwachen Absatz: docs.djangoproject.com/de/1.3/topics/auth/#groups Ich denke, es ist hilfreich zu bedenken, dass die Auth-Modelle nur reguläre Modelle sind und die Standardmodellreferenz gilt.
Francis Yaconiello
Wo ist user_setin Django Doc? Ich kann es nirgendwo finden
Minh Thai
1
@MinhThai Der Standardwert für ein Feld mit umgekehrter Beziehung ist, <content_type>_setwenn related_namedas Feld nicht festgelegt ist.
Sox mit Monica
99

So geht's in modernen Versionen von Django (getestet in Django 1.7):

from django.contrib.auth.models import Group
group = Group.objects.get(name='groupname')
user.groups.add(group)
coredumperror
quelle
1
Sie können auch tun Group.objects.get_by_natural_key('groupname'), aber es macht es nicht kurzgeschlossen: D
CpILL
2
@enchance Wo immer Sie dies tun müssen. Wahrscheinlich innerhalb des Codes für eine Ansicht, die Gruppenzuweisungen ausführt.
Coredumperror