Как получить доступ к HttpRequest из urls.py в Django - PullRequest
5 голосов
/ 29 января 2011

В основном я хочу использовать общее представление, которое перечисляет объекты на основе имени пользователя.Теперь вопрос в том, как мне сделать что-то вроде:

(r'^resources/$',
  ListView.as_view(
    queryset=Resources.objects.filter(user=request.user.username),
    ...
  )
)

Я не смог найти способ доступа к объекту HttpRequest (request) ... Или мне нужно использовать мои собственные представленияи все ли объекты выделены там?

Ответы [ 2 ]

4 голосов
/ 29 января 2011

Вы можете попробовать создать подкласс общего представления:

class PublisherListView(ListView):
    def get_queryset(self):
        return Resources.objects.filter(user=self.request.user.username)

Тогда ваша запись URL будет выглядеть следующим образом:

(r'^resources/$',
  PublisherListView.as_view(
    ...
  )
)

Более подробную информацию о динамической фильтрации в представлениях на основе классов можно найти здесь.: http://docs.djangoproject.com/en/dev/topics/class-based-views/#dynamic-filtering

3 голосов
/ 30 января 2011

Если вы действительно хотите загромождать свой URLconf напрямую, вы можете сделать это так:

(r'^resources/$',
 lambda request: ListView.as_view(queryset=Resources.objects.filter(user=request.user.username), ...)(request)
)

Или получить доступ к запросу, разделив представление на подклассы:

class MyListView(ListView):
    def dispatch(self, request, *args, **kwargs):
        self.queryset = Resources.objects.filter(user = request.user.username)
        return super(MyListView, self).dispatch(request, *args, **kwargs)
...