Django Access im Benutzer im benutzerdefinierten Manager angemeldet
-
20-09-2019 - |
Frage
Ich möchte auf den aktuell angemeldeten Benutzer in einem benutzerdefinierten Manager zugreifen, den ich geschrieben habe. Ich möchte dies tun, damit ich die Ergebnisse filtern kann, um nur Objekte anzuzeigen, auf die sie Zugriff haben.
Gibt es trotzdem dies, ohne es tatsächlich einzugeben? Ähnlich wie es funktioniert in Ansichten, bei denen Sie anfordern können. Benutzer.
Vielen Dank
Lösung
Ohne es weiterzugeben, kann ich am besten eine Middleware verwenden (beschrieben in Diese Stackoverflow -Frage, Ich kopiere/einfüge für einfache Referenz):
Middleware:
try:
from threading import local
except ImportError:
from django.utils._threading_local import local
_thread_locals = local()
def get_current_user():
return getattr(_thread_locals, 'user', None)
class ThreadLocals(object):
def process_request(self, request):
_thread_locals.user = getattr(request, 'user', None)
Manager:
class UserContactManager(models.Manager):
def get_query_set(self):
return super(UserContactManager, self).get_query_set().filter(creator=get_current_user())
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow