2010-02-16 2 views
2

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

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

Благодаря

+0

Любой шанс увидеться с менеджером? –

ответ

5

без прохождения его, лучший способ я видел использовать промежуточное программное обеспечение (описанное в this StackOverflow question, я копировать/вставить для удобства):

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) 

менеджер:

class UserContactManager(models.Manager): 
    def get_query_set(self): 
     return super(UserContactManager, self).get_query_set().filter(creator=get_current_user()) 
Смежные вопросы