Ho il seguente metodo:request.user restituisce un oggetto SimpleLazyObject, come posso "attivarlo"?
def _attempt(actor):
if actor.__class__ != User:
raise TypeError
che viene chiamato da una visione:
self.object.attempt(self.request.user)
Come si può vedere, il metodo _attempt si aspetta che l'attore sia il tipo django.contrib.auth.models.User
, tuttavia l'oggetto sembra essere di tipo django.utils.functional.SimpleLazyObject
. Perché è così? E ancora più importante, come posso convertire il LazyObject
(che apparentemente è una specie di wrapper per un oggetto User) in un oggetto User
?
Maggiori informazioni Request.user
è disponibile qui: https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.user Questa documentazione sembra indicare la request.user
dovrebbe essere un oggetto User
...
====== ===== post-edit
ho il seguente metodo ora:
def _attempt(obj, action, actor, msg):
actor.is_authenticated()
if isinstance(actor, LazyObject):
print type(actor)
sto passando un utente, ma la condizione if
è ancora vero, l'attore è ancora una LazyObject
. Perché è così?
Grazie per la risposta, Chris. In effetti, sto cercando di verificare se si tratta di un utente o di un utente anonimo. Ho il seguente metodo ora: 'def _attempt (obj, azione, attore, MSG): actor.is_authenticated() se isinstance (attore, LazyObject): tipo di stampa (attore)' Sono passando un utente, tuttavia se la condizione if è ancora vera, l'attore è ancora un LazyObject. Perché è così? – Himerzi
Mi rendo conto che potrei fare una prova: su actor.isauthenticated() e quindi prendere un AttributeException, che indicherebbe che l'attore non ha alcun metodo autenticato (e quindi non è un utente). Ma sono ancora un po 'perplesso sul motivo per cui il frammento di codice nel mio commento precedente non funziona. – Himerzi
È * funzionante, in un certo senso; '__class__' restituisce esattamente ciò che dovrebbe restituire,' SimpleLazyObject', perché è quello che la classe * è *. –