J'ai créé un groupe personnalisé dans le site d'administration de Django.
Dans mon code, je veux vérifier si un utilisateur est dans ce groupe. Comment dois-je m'y prendre ?
J'ai créé un groupe personnalisé dans le site d'administration de Django.
Dans mon code, je veux vérifier si un utilisateur est dans ce groupe. Comment dois-je m'y prendre ?
J'ai une situation similaire, je voulais tester si l'utilisateur est dans un certain groupe. J'ai donc créé un nouveau fichier utils.py dans lequel je place tous mes petits utilitaires qui m'aident dans toute l'application. Là, j'ai cette définition :
utils.py
def is_company_admin(user):
return user.groups.filter(name='company_admin').exists()
donc en fait je teste si l'utilisateur est dans le groupe entreprise_admin et pour plus de clarté, j'ai appelé cette fonction est_company_admin .
Lorsque je veux vérifier si l'utilisateur se trouve dans la section entreprise_admin Je fais juste ça :
views.py
from .utils import *
if is_company_admin(request.user):
data = Company.objects.all().filter(id=request.user.company.id)
Maintenant, si vous souhaitez tester la même chose dans votre modèle, vous pouvez ajouter est_utilisateur_admin dans votre contexte, quelque chose comme ça :
views.py
return render(request, 'admin/users.html', {'data': data, 'is_company_admin': is_company_admin(request.user)})
Vous pouvez maintenant évaluer votre réponse dans un modèle :
users.html
{% if is_company_admin %}
... do something ...
{% endif %}
Solution simple et propre, basée sur les réponses que l'on peut trouver plus tôt dans ce fil, mais faite différemment. J'espère que cela aidera quelqu'un.
Testé dans Django 3.0.4.
Juste au cas où vous voudriez vérifier que le groupe de l'utilisateur appartient à une liste de groupes prédéfinis :
def is_allowed(user):
allowed_group = set(['admin', 'lead', 'manager'])
usr = User.objects.get(username=user)
groups = [ x.name for x in usr.groups.all()]
if allowed_group.intersection(set(groups)):
return True
return False
Je l'ai fait comme ça. Pour le groupe nommé Editor
.
# views.py
def index(request):
current_user_groups = request.user.groups.values_list("name", flat=True)
context = {
"is_editor": "Editor" in current_user_groups,
}
return render(request, "index.html", context)
modèle
# index.html
{% if is_editor %}
<h1>Editor tools</h1>
{% endif %}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.