Another common need is to filter down the objects given in a list page by some key in the URL. Earlier we hard-coded the publisher's name in the URLconf, but what if we wanted to write a view that displayed all the books by some arbitrary publisher?
Handily, the ListView
has a get_queryset()
method we can override. Previously, it has just been returning the value of the queryset
attribute, but now we can add more logic. The key part to making this work is that when class-based views are called, various useful things are stored on self
; as well as the request (self.request
), this includes the positional (self.args
) and name-based (self.kwargs
) arguments captured according to the URLconf.
Here, we have a URLconf with a single captured group:
# urls.py from django.conf.urls import url from books.views import PublisherBookList urlpatterns = [ url(r'^books/([\w-]+)/$', PublisherBookList.as_view()), ]
Next, we'll write the PublisherBookList...