Criei um grupo personalizado no site de administração do Django.
No meu código, quero verificar se um usuário está neste grupo. Como faço isso?
Criei um grupo personalizado no site de administração do Django.
No meu código, quero verificar se um usuário está neste grupo. Como faço isso?
Você pode acessar os grupos simplesmente através do groups
atributo on User
.
from django.contrib.auth.models import User, Group
group = Group(name = "Editor")
group.save() # save this new group for this example
user = User.objects.get(pk = 1) # assuming, there is one initial user
user.groups.add(group) # user is now in the "Editor" group
então user.groups.all()
retorna [<Group: Editor>]
.
Como alternativa e mais diretamente, você pode verificar se um usuário está em um grupo:
if django_user.groups.filter(name = groupname).exists():
...
Note que tambémgroupname
pode ser o objeto atual do Django Group.
if user.groups.filter(name=group_name).count(): # do something
Seu objeto Usuário está vinculado ao objeto Grupo por meio de um relacionamento ManyToMany .
Assim, você pode aplicar o método de filtro ao user.groups .
Portanto, para verificar se um determinado usuário está em um determinado grupo ("Membro", por exemplo), faça o seguinte:
Se você deseja verificar se um determinado usuário pertence a mais de um grupo, use o operador __in da seguinte forma:
Observe que essas funções podem ser usadas com o decorador @user_passes_test para gerenciar o acesso às suas visualizações:
Espero que esta ajuda
fonte
user in groups
(ou vice-versa)..exists()
no final para retornar um booleano? Caso contrário,is_member()
eis_in_multiple_groups()
retornará umaQuerySet
, o que pode não se obter o resultado desejado.def is_member(user): return user.is_superuser or user.groups.filter(...
is_in_multiple_groups
pode ser mais explicitamente nomeadois_in_some_groups
, uma vez que não requer que o usuário ser um membro de todos os gruposSe você precisar da lista de usuários que estão em um grupo, faça o seguinte:
e depois verifique
para verificar se o usuário está no grupo.
fonte
user.groups.filter(name="group name").exists()
deve funcionar bem. A solução que você escreveu usa duas consultas e, portanto, não é a ideal.Se você não precisar da instância do usuário no site (como eu fiz), poderá fazê-lo com
Isso produzirá apenas uma solicitação para o banco de dados e retornará um booleano.
fonte
Se um usuário pertence a um determinado grupo ou não, pode ser verificado nos modelos do django usando:
{% if group in request.user.groups.all %}
"some action"
{% endif %}
fonte
Você só precisa de uma linha:
fonte
Caso você queira verificar se o grupo de usuários pertence a uma lista de grupos predefinida:
fonte
Eu tenho situação semelhante, eu queria testar se o usuário está em um determinado grupo. Então, eu criei um novo arquivo utils.py onde coloco todos os meus pequenos utilitários que me ajudam em todo o aplicativo. Lá, eu tenho essa definição:
basicamente, estou testando se o usuário está no grupo company_admin e, para maior clareza, chamei essa função de is_company_admin .
Quando quero verificar se o usuário está no company_admin , basta fazer isso:
Agora, se você deseja testar o mesmo no seu modelo, pode adicionar is_user_admin no seu contexto, algo como isto:
Agora você pode avaliar sua resposta em um modelo:
Solução simples e limpa, com base em respostas que podem ser encontradas anteriormente neste tópico, mas feitas de maneira diferente. Espero que ajude alguém.
Testado no Django 3.0.4.
fonte
data = Company.objects.all().filter(id=request.user.company.id)
, o que a Empresa significa? Esse é o seu modelo?Em uma linha:
Isso avalia como
True
ouFalse
.fonte
.exists()
para deixar o banco de dados fazer o trabalho.Eu fiz da seguinte maneira. Parece ineficiente, mas eu não tinha outra maneira de pensar:
fonte
User.objects.filter(username='tom', groups__name='admin').exists()
Essa consulta informará o usuário: "tom" se pertence ao grupo "admin" ou não
fonte
Eu fiz assim. Para o grupo chamado
Editor
.modelo
fonte