5

Basically I want to use a generic view that lists objects based on a username. Now, the question is, how do I do something like:

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

I couldn't find a way to access the HttpRequest (request) object though... Or do I need to use my own views and do all object selection there?

2 Answers 2

4

You could try subclassing the generic view:

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

Then your urls entry would look like:

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

More information on dynamic filtering in class based views can be found here: http://docs.djangoproject.com/en/dev/topics/class-based-views/#dynamic-filtering

Sign up to request clarification or add additional context in comments.

3 Comments

I agree. This is the correct way to do this. I'm sick of urls.py getting unmanageable.
Sorry, AndiDog, request would come from self in class based views. Thanks for pointing that out.
If you look at your code again... now where does self come from? ;) The dispatch method must be overridden because that's the one that gets the request object. It's impossible to put per-request stuff in a class variable like you do.
3

If you really want to clutter your URLconf directly, you can do it like so:

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

Or access the request by subclassing the view:

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)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.