Ich habe eine benutzerdefinierte Gruppe auf der Administrationsseite von Django erstellt.
In meinem Code möchte ich überprüfen, ob sich ein Benutzer in dieser Gruppe befindet. Wie mache ich das?
Ich habe eine benutzerdefinierte Gruppe auf der Administrationsseite von Django erstellt.
In meinem Code möchte ich überprüfen, ob sich ein Benutzer in dieser Gruppe befindet. Wie mache ich das?
Sie können einfach über das groups
Attribut auf auf die Gruppen zugreifen 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
user.groups.all()
kehrt dann zurück [<Group: Editor>]
.
Alternativ und direkter können Sie überprüfen, ob sich ein Benutzer in einer Gruppe befindet, indem Sie:
if django_user.groups.filter(name = groupname).exists():
...
Beachten Sie, dass groupname
dies auch das eigentliche Django Group-Objekt sein kann.
if user.groups.filter(name=group_name).count(): # do something
Ihr Benutzerobjekt wird mit dem verknüpften Gruppe Objekt durch eine ManyToMany Beziehung.
Sie können damit die Filtermethode auf user.groups anwenden .
Um zu überprüfen, ob sich ein bestimmter Benutzer in einer bestimmten Gruppe befindet (im Beispiel "Mitglied"), gehen Sie wie folgt vor:
Wenn Sie überprüfen möchten, ob ein bestimmter Benutzer zu mehr als einer bestimmten Gruppe gehört, verwenden Sie den Operator __in wie folgt :
Beachten Sie, dass diese Funktionen mit dem Dekorator @user_passes_test verwendet werden können , um den Zugriff auf Ihre Ansichten zu verwalten:
Ich hoffe das hilft
quelle
user in groups
(oder umgekehrt)..exists()
am Ende hinzufügen , um einen Booleschen Wert zurückzugeben? Andernfallsis_member()
undis_in_multiple_groups()
eine RückkehrQuerySet
, die nicht das gewünschte Ergebnis geben kann.def is_member(user): return user.is_superuser or user.groups.filter(...
is_in_multiple_groups
kann expliziter benannt werden,is_in_some_groups
da der Benutzer nicht Mitglied aller Gruppen sein mussWenn Sie die Liste der Benutzer in einer Gruppe benötigen, können Sie dies folgendermaßen tun:
und dann überprüfen
um zu überprüfen, ob der Benutzer in der Gruppe ist.
quelle
user.groups.filter(name="group name").exists()
sollte gut funktionieren. Die von Ihnen geschriebene Lösung verwendet zwei Abfragen und ist daher nicht sehr optimal.Wenn Sie die Benutzerinstanz nicht vor Ort benötigen (wie ich), können Sie dies tun
Dies erzeugt nur eine Anforderung an die Datenbank und gibt einen Booleschen Wert zurück.
quelle
Ob ein Benutzer einer bestimmten Gruppe angehört oder nicht, kann in Django-Vorlagen überprüft werden mit:
{% if group in request.user.groups.all %}
"some action"
{% endif %}
quelle
Sie brauchen nur eine Zeile:
quelle
Nur für den Fall, dass Sie überprüfen möchten, ob die Benutzergruppe zu einer vordefinierten Gruppenliste gehört:
quelle
Ich habe eine ähnliche Situation, ich wollte testen, ob der Benutzer in einer bestimmten Gruppe ist. Also habe ich eine neue Datei utils.py erstellt, in der ich alle meine kleinen Dienstprogramme ablege, die mir bei der gesamten Anwendung helfen. Dort habe ich diese Definition:
Im Grunde teste ich, ob sich der Benutzer in der Gruppe company_admin befindet, und aus Gründen der Übersichtlichkeit habe ich diese Funktion is_company_admin genannt .
Wenn ich überprüfen möchte, ob sich der Benutzer in der Datei company_admin befindet, gehe ich einfach folgendermaßen vor:
Wenn Sie dasselbe in Ihrer Vorlage testen möchten, können Sie is_user_admin in Ihrem Kontext hinzufügen.
Jetzt können Sie Ihre Antwort in einer Vorlage auswerten:
Einfache und saubere Lösung, basierend auf Antworten, die früher in diesem Thread zu finden sind, aber anders gemacht werden. Hoffe es wird jemandem helfen.
Getestet in Django 3.0.4.
quelle
data = Company.objects.all().filter(id=request.user.company.id)
Was bedeutet das Unternehmen in Ihrem Unternehmen? Ist das dein Model?In einer Zeile:
Dies ergibt entweder
True
oderFalse
.quelle
.exists()
, die Datenbank die Arbeit machen zu lassen.Ich habe es folgendermaßen gemacht. Scheint ineffizient, aber ich hatte keinen anderen Weg im Kopf:
quelle
User.objects.filter(username='tom', groups__name='admin').exists()
Diese Abfrage informiert den Benutzer: "tom", ob er zur Gruppe "admin" gehört oder nicht
quelle
Ich habe es so gemacht. Für die Gruppe mit dem Namen
Editor
.Vorlage
quelle