mirror of
https://github.com/django/django.git
synced 2025-01-10 10:26:34 +00:00
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:
parent
d5589b4cd3
commit
88de53d4a8
@ -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):
|
||||||
|
Loading…
Reference in New Issue
Block a user