Browse files

[1.5.x] Fixed #20659 -- Fixed PublisherDetail in CBV topic documentat…


Thanks to tudor.prodan, susan, and Tim Graham for the report and reviews.

Backport of 88de53d from master.
  • Loading branch information...
bmispelon committed Jul 1, 2013
1 parent 267aeab commit 0946aac61d0da2aceafe6179cdb64ccad583d924
Showing with 13 additions and 13 deletions.
  1. +13 −13 docs/topics/class-based-views/mixins.txt
@@ -285,17 +285,18 @@ One way to do this is to combine :class:`ListView` with
for the paginated list of books can hang off the publisher found as the single
object. In order to do this, we need to have two different querysets:
**``Publisher`` queryset for use in ``get_object``**
We'll set the ``model`` attribute on the view and rely on the default
implementation of ``get_object()`` to fetch the correct ``Publisher``
**``Book`` queryset for use by ``ListView``**
The default implementation of ``get_queryset`` uses the ``model`` attribute
to construct the queryset. This conflicts with our use of this attribute
for ``get_object`` so we'll override that method and have it return
the queryset of ``Book`` objects linked to the ``Publisher`` we're looking
``Book`` queryset for use by :class:`~django.views.generic.list.ListView`
Since we have access to the ``Publisher`` whose books we want to list, we
simply override ``get_queryset()`` and use the ``Publisher``'s
:ref:`reverse foreign key manager<backwards-related-objects>`.
``Publisher`` queryset for use in :meth:`~django.views.generic.detail.SingleObjectMixin.get_object()`
We'll rely on the default implementation of ``get_object()`` to fetch the
correct ``Publisher`` object.
However, we need to explicitly pass a ``queryset`` argument because
otherwise the default implementation of ``get_object()`` would call
``get_queryset()`` which we have overridden to return ``Book`` objects
instead of ``Publisher`` ones.
.. note::
@@ -315,12 +316,11 @@ Now we can write a new ``PublisherDetail``::
from books.models import Publisher
class PublisherDetail(SingleObjectMixin, ListView):
model = Publisher # for SingleObjectMixin.get_object
paginate_by = 2
template_name = "books/publisher_detail.html"
def get(self, request, *args, **kwargs):
self.object = self.get_object()
self.object = self.get_object(queryset=Publisher.objects.all())
return super(PublisherDetail, self).get(request, *args, **kwargs)
def get_context_data(self, **kwargs):

0 comments on commit 0946aac

Please sign in to comment.