Fixed #20659 -- Fixed PublisherDetail in CBV topic documentation.

Thanks to tudor.prodan, susan, and Tim Graham for the report and reviews.
This commit is contained in:
Baptiste Mispelon 2013-07-01 14:05:49 +02:00
parent d5589b4cd3
commit 88de53d4a8
1 changed files with 12 additions and 13 deletions

View File

@ -286,18 +286,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 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: object. In order to do this, we need to have two different querysets:
``Publisher`` queryset for use in
:meth:`~django.views.generic.detail.SingleObjectMixin.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``
object.
``Book`` queryset for use by :class:`~django.views.generic.list.ListView` ``Book`` queryset for use by :class:`~django.views.generic.list.ListView`
The default implementation of ``get_queryset()`` uses the ``model`` attribute Since we have access to the ``Publisher`` whose books we want to list, we
to construct the queryset. This conflicts with our use of this attribute simply override ``get_queryset()`` and use the ``Publisher``'s
for ``get_object()`` so we'll override that method and have it return :ref:`reverse foreign key manager<backwards-related-objects>`.
the queryset of ``Book`` objects linked to the ``Publisher`` we're looking
at. ``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:: .. note::
@ -317,12 +317,11 @@ Now we can write a new ``PublisherDetail``::
from books.models import Publisher from books.models import Publisher
class PublisherDetail(SingleObjectMixin, ListView): class PublisherDetail(SingleObjectMixin, ListView):
model = Publisher # for SingleObjectMixin.get_object
paginate_by = 2 paginate_by = 2
template_name = "books/publisher_detail.html" template_name = "books/publisher_detail.html"
def get(self, request, *args, **kwargs): 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) return super(PublisherDetail, self).get(request, *args, **kwargs)
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):