Adicionando um usuário a um grupo no django

139

Como eu adicionaria um usuário a um grupo no django pelo nome do grupo?

Eu posso fazer isso:

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

Como eu faria algo assim:

user.groups.add(name='groupname') # add by name
David542
fonte
Esta versão da solução é sensível? Quando eu tentei este é o Django 1.8, eu tenho "palavra-chave inesperado: name"
rschwieb

Respostas:

248

Localize o grupo usando o modelo de grupo com o nome do grupo e adicione o usuário ao 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
fonte
17
Obrigado por isso. Parece bobagem que algumas das coisas mais básicas estão ausentes ou difíceis de encontrar nos docs django
Francis Yaconiello
1
docs.djangoproject.com/en/dev/intro/tutorial01 Existem exemplos semelhantes na seção 'Jogando com a API'
juankysmith
9
O tutorial é bastante útil. O que eu quis dizer foi que eu esperava ver em uma seção dos documentos sob auth para criar grupos de forma programática. em vez disso, tudo o que há é um parágrafo fraco: docs.djangoproject.com/en/1.3/topics/auth/#groups Acho que ajuda ter em mente que os modelos de autenticação são apenas modelos regulares e a referência de modelo padrão se aplica.
Francis Yaconiello 01/09/11
Onde está o user_setDjango doc? Eu não posso encontrá-lo em qualquer lugar
Minh Thai
1
@MinhThai, o valor padrão para um campo de relação inversa é <content_type>_setquando related_namenão está definido no campo.
sox com Monica
99

Aqui está como fazer isso nas versões modernas do Django (testadas no Django 1.7):

from django.contrib.auth.models import Group
group = Group.objects.get(name='groupname')
user.groups.add(group)
coredumperror
fonte
1
você também pode fazer Group.objects.get_by_natural_key('groupname'), mas não fica em curto: D
CpILL 2/17/17
2
@enchance Onde você precisar. Provavelmente dentro do código de uma Visualização que está realizando atribuições de Grupo.
Coredumperror #