Commit 88de53d4 authored by Baptiste Mispelon's avatar Baptiste Mispelon
Browse files

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

Thanks to tudor.prodan, susan, and Tim Graham for the report and reviews.
parent d5589b4c
Loading
Loading
Loading
Loading
+12 −13
Original line number Diff line number Diff line
@@ -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
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`
    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
    at.
    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::

@@ -317,12 +317,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):