Creé un grupo personalizado en el sitio de administración de Django.
En mi código, quiero verificar si un usuario está en este grupo. ¿Cómo puedo hacer eso?
Creé un grupo personalizado en el sitio de administración de Django.
En mi código, quiero verificar si un usuario está en este grupo. ¿Cómo puedo hacer eso?
Puede acceder a los grupos simplemente a través del groups
atributo activado 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
Luego user.groups.all()
regresa [<Group: Editor>]
.
Alternativamente, y más directamente, puede verificar si un usuario está en un grupo:
if django_user.groups.filter(name = groupname).exists():
...
Tenga en cuenta que tambiéngroupname
puede ser el objeto real del Grupo Django.
if user.groups.filter(name=group_name).count(): # do something
Su objeto Usuario está vinculado al objeto Grupo a través de una relación ManyToMany .
De este modo, puede aplicar el método de filtro a user.groups .
Entonces, para verificar si un Usuario dado está en un grupo determinado ("Miembro" para el ejemplo), simplemente haga esto:
Si desea verificar si un usuario dado pertenece a más de un grupo dado, use el operador __in de la siguiente manera:
Tenga en cuenta que esas funciones se pueden usar con el decorador @user_passes_test para administrar el acceso a sus vistas:
Espero que esto ayude
fuente
user in groups
(o viceversa)..exists()
al final para devolver un booleano? De lo contrariois_member()
, yis_in_multiple_groups()
devolverá unaQuerySet
, que puede no dar el resultado deseado.def is_member(user): return user.is_superuser or user.groups.filter(...
is_in_multiple_groups
puede ser nombrado más explícitamenteis_in_some_groups
ya que no requiere que el usuario sea miembro de todos los gruposSi necesita la lista de usuarios que están en un grupo, puede hacer esto en su lugar:
y luego verifica
para verificar si el usuario está en el grupo.
fuente
user.groups.filter(name="group name").exists()
Debería funcionar bien. La solución que ha escrito utiliza dos consultas y, por lo tanto, no es muy óptima.Si no necesita la instancia de usuario en el sitio (como yo lo hice), puede hacerlo con
Esto producirá solo una solicitud a la base de datos y devolverá un valor booleano.
fuente
Si un usuario pertenece a un determinado grupo o no, se puede verificar en las plantillas de django usando:
{% if group in request.user.groups.all %}
"some action"
{% endif %}
fuente
Solo necesitas una línea:
fuente
En caso de que si desea verificar que el grupo de usuarios pertenezca a una lista de grupos predefinida:
fuente
Tengo una situación similar, quería probar si el usuario está en un determinado grupo. Entonces, he creado un nuevo archivo utils.py donde pongo todas mis pequeñas utilidades que me ayudan a través de toda la aplicación. Ahí tengo esta definición:
así que básicamente estoy probando si el usuario está en el grupo company_admin y para mayor claridad he llamado a esta función is_company_admin .
Cuando quiero comprobar si el usuario está en el company_admin acabo de hacer esto:
Ahora, si desea probar lo mismo en su plantilla, puede agregar is_user_admin en su contexto, algo como esto:
Ahora puede evaluar su respuesta en una plantilla:
Solución simple y limpia, basada en respuestas que se pueden encontrar anteriormente en este hilo, pero que se hacen de manera diferente. Espero que ayude a alguien.
Probado en Django 3.0.4.
fuente
data = Company.objects.all().filter(id=request.user.company.id)
, ¿qué significa la Compañía? ¿Es ese tu modelo?En una línea:
Esto se evalúa como
True
oFalse
.fuente
.exists()
para dejar que el db haga el trabajo.Lo he hecho de la siguiente manera. Parece ineficiente pero no tenía otra forma en mi mente:
fuente
User.objects.filter(username='tom', groups__name='admin').exists()
Esa consulta le informará al usuario: "tom" si pertenece al grupo "admin" o no
fuente
Lo hice así. Para el grupo nombrado
Editor
.modelo
fuente