django доступ залогинился в пользовательском менеджере - PullRequest
2 голосов
/ 16 февраля 2010

Я хочу получить доступ к зарегистрированному в данный момент пользователю в специальном менеджере, который я написал. Я хочу сделать это так, чтобы я мог отфильтровать результаты, чтобы показать только те объекты, к которым у них есть доступ.

Есть ли способ сделать это без фактической передачи? Нечто подобное тому, как это работает в представлениях, где вы можете сделать request.user.

Спасибо

1 Ответ

5 голосов
/ 16 февраля 2010

Без передачи, лучший способ, который я видел, - это использовать промежуточное ПО (описанное в в этом вопросе StackOverflow , я скопирую / вставлю для удобства пользования):

Промежуточное программное обеспечение:

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)

менеджер:

class UserContactManager(models.Manager):
    def get_query_set(self):
        return super(UserContactManager, self).get_query_set().filter(creator=get_current_user())
...