Aggiunta di un utente a un gruppo in django


139

Come aggiungerei un utente a un gruppo in Django con il nome del gruppo?

Posso farlo:

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

Come farei una cosa del genere:

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

Questa versione della soluzione è sensibile? Quando ho provato questo è django 1.8, ho ricevuto "parole chiave inaspettate: nome"
rschwieb

Risposte:


248

Trova il gruppo usando il modello Gruppo con il nome del gruppo, quindi aggiungi l'utente al set_utente

from django.contrib.auth.models import Group
my_group = Group.objects.get(name='my_group_name') 
my_group.user_set.add(your_user)

17
Grazie per questo. Sembra sciocco che alcune delle cose più elementari siano mancanti o difficili da trovare nei documenti di django
Francis Yaconiello,

1
docs.djangoproject.com/en/dev/intro/tutorial01 Ci sono esempi simili nella sezione "Giocare con l'API"
juankysmith

9
Il tutorial è piuttosto utile, quello che intendevo dire era che mi sarei aspettato di vedere in una sezione dei documenti sotto auth per la creazione programmatica di gruppi. invece tutto quello che c'è è un paragrafo debole: docs.djangoproject.com/en/1.3/topics/auth/#groups Immagino che sia utile tenere presente che i modelli di autenticazione sono solo modelli regolari e si applica il riferimento al modello standard.
Francis Yaconiello,

dov'è user_setin Django doc? Non riesco a trovarlo da nessuna parte
Minh Thai,

1
@MinhThai il valore predefinito per un campo di relazione inversa è <content_type>_setquando related_namenon è impostato sul campo.
sox con Monica il

99

Ecco come farlo nelle versioni moderne di Django (testato in Django 1.7):

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

1
puoi anche farlo Group.objects.get_by_natural_key('groupname'), ma non è corto: D
CpILL

2
@enchance Ovunque tu debba farlo. Probabilmente all'interno del codice per una vista che sta facendo assegnazioni di gruppo.
coredumperror,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.