{{{#!python
from django.views.generic import ListView
from django.views.generic.detail import SingleObjectMixin
from books.models import Publisher
class PublisherDetail(SingleObjectMixin, ListView):
paginate_by = 2
template_name = "books/publisher_detail.html"
def get(self, request, *args, **kwargs):
self.object = self.get_object(queryset=Publisher.objects.all())
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['publisher'] = self.object
return context
def get_queryset(self):
return self.object.book_set.all()
}}}
`PublisherDetail.get_context_data(self, **kwargs)` is not neccessary here
at all, isn't it ? `SingleObjectMixin.get_context_data(self, **kwargs)` is
responsible to add `publisher` key in `context` dict, which is called from
`BaseListView.get(self, request, *args, **kwargs)`.
--
Ticket URL: <https://code.djangoproject.com/ticket/30699>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* owner: nobody => Davit Gachechiladze
* status: new => assigned
Old description:
> The following code snippet is from
> [https://docs.djangoproject.com/en/2.2/topics/class-based-views/mixins/]
>
> {{{#!python
> from django.views.generic import ListView
> from django.views.generic.detail import SingleObjectMixin
> from books.models import Publisher
>
> class PublisherDetail(SingleObjectMixin, ListView):
> paginate_by = 2
> template_name = "books/publisher_detail.html"
>
> def get(self, request, *args, **kwargs):
> self.object = self.get_object(queryset=Publisher.objects.all())
> return super().get(request, *args, **kwargs)
>
> def get_context_data(self, **kwargs):
> context = super().get_context_data(**kwargs)
> context['publisher'] = self.object
> return context
>
> def get_queryset(self):
> return self.object.book_set.all()
> }}}
>
> `PublisherDetail.get_context_data(self, **kwargs)` is not neccessary here
> at all, isn't it ? `SingleObjectMixin.get_context_data(self, **kwargs)`
> is responsible to add `publisher` key in `context` dict, which is called
> from `BaseListView.get(self, request, *args, **kwargs)`.
New description:
The following code snippet is from
[https://docs.djangoproject.com/en/2.2/topics/class-based-views/mixins/]
{{{#!python
from django.views.generic import ListView
from django.views.generic.detail import SingleObjectMixin
from books.models import Publisher
class PublisherDetail(SingleObjectMixin, ListView):
paginate_by = 2
template_name = "books/publisher_detail.html"
def get(self, request, *args, **kwargs):
self.object = self.get_object(queryset=Publisher.objects.all())
return super().get(request, *args, **kwargs)
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['publisher'] = self.object
return context
def get_queryset(self):
return self.object.book_set.all()
}}}
`PublisherDetail.get_context_data(self, **kwargs)` is not neccessary here
at all, isn't it ? `SingleObjectMixin.get_context_data(self, **kwargs)` is
responsible to add `publisher` key in `context` dict, which is called from
`BaseListView.get(self, request, *args, **kwargs)`.
[https://github.com/django/django/pull/11658]
--
--
Ticket URL: <https://code.djangoproject.com/ticket/30699#comment:1>
* status: assigned => closed
* resolution: => wontfix
Comment:
I think the override is serving a purpose here:
> We have to think carefully about get_context_data(). Since both
SingleObjectMixin and ListView will put things in the context data under
the value of context_object_name if it’s set, we’ll instead explicitly
ensure the Publisher is in the context data.
Removing it is fragile. (Without it, as soon as I set
`context_object_name` my code would break.)
With this discussion kind of topic there's always other/better ways to do
things but in context I think the existing example is fine.
Thanks for the input.
--
Ticket URL: <https://code.djangoproject.com/ticket/30699#comment:2>
Comment (by Davit Gachechiladze):
Replying to [comment:2 Carlton Gibson]:
> I think the override is serving a purpose here:
>
> > We have to think carefully about get_context_data(). Since both
SingleObjectMixin and ListView will put things in the context data under
the value of context_object_name if it’s set, we’ll instead explicitly
ensure the Publisher is in the context data.
>
> Removing it is fragile. (Without it, as soon as I set
`context_object_name` my code would break.)
>
> With this discussion kind of topic there's always other/better ways to
do things but in context I think the existing example is fine.
>
> Thanks for the input.
I understand. Thanks.
--
Ticket URL: <https://code.djangoproject.com/ticket/30699#comment:3>