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

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)

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)

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 #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.