доступ к django, зарегистрированный пользователем в пользовательском менеджере

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

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

Спасибо


person John    schedule 16.02.2010    source источник
comment
Есть ли шанс увидеть менеджера?   -  person Steve Jalim    schedule 16.02.2010


Ответы (1)


Не передавая его, лучший способ, который я видел, - это использовать промежуточное программное обеспечение (описанное в этот вопрос 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())
person Jack M.    schedule 16.02.2010