Pergunta

Quero acessar o usuário logado atualmente em um gerenciador personalizado que escrevi. Quero fazer isso para que eu possa filtrar os resultados para mostrar apenas objetos aos quais eles têm acesso.

Existe alguma maneira de fazer isso sem realmente passar? Algo semelhante à forma como funciona em visualizações em que você pode fazer solicita.User.

Obrigado

Foi útil?

Solução

Sem passar, a melhor maneira que eu vi é usar um middleware (descrito em Esta questão de Stackoverflow, Vou copiar/colar para facilitar a referência):

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)

Gerente:

class UserContactManager(models.Manager):
    def get_query_set(self):
        return super(UserContactManager, self).get_query_set().filter(creator=get_current_user())
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top