Fixed #20235 -- Use self.object_list if object_list not present in get_context_data kwargs.

This is so MultipleObjectMixin can be used in the same way as
SingleObjectMixin.
This commit is contained in:
Matthew Somerville 2013-04-10 11:27:28 +01:00 committed by Markus Holtermann
parent 9012a9e200
commit 1c921cfac3
4 changed files with 34 additions and 2 deletions

View File

@ -274,6 +274,7 @@ answer newbie questions, and generally made Django that much better:
Eric Holscher <http://ericholscher.com> Eric Holscher <http://ericholscher.com>
Ian Holsman <http://feh.holsman.net/> Ian Holsman <http://feh.holsman.net/>
Kieran Holland <http://www.kieranholland.com> Kieran Holland <http://www.kieranholland.com>
Markus Holtermann <http://markusholtermann.eu>
Sung-Jin Hong <serialx.net@gmail.com> Sung-Jin Hong <serialx.net@gmail.com>
Leo "hylje" Honkanen <sealage@gmail.com> Leo "hylje" Honkanen <sealage@gmail.com>
Matt Hoskins <skaffenuk@googlemail.com> Matt Hoskins <skaffenuk@googlemail.com>

View File

@ -105,7 +105,7 @@ class MultipleObjectMixin(ContextMixin):
""" """
Get the context for this view. Get the context for this view.
""" """
queryset = kwargs.pop('object_list') queryset = kwargs.pop('object_list', self.object_list)
page_size = self.get_paginate_by(queryset) page_size = self.get_paginate_by(queryset)
context_object_name = self.get_context_object_name(queryset) context_object_name = self.get_context_object_name(queryset)
if page_size: if page_size:
@ -149,7 +149,7 @@ class BaseListView(MultipleObjectMixin, View):
if is_empty: if is_empty:
raise Http404(_("Empty list and '%(class_name)s.allow_empty' is False.") raise Http404(_("Empty list and '%(class_name)s.allow_empty' is False.")
% {'class_name': self.__class__.__name__}) % {'class_name': self.__class__.__name__})
context = self.get_context_data(object_list=self.object_list) context = self.get_context_data()
return self.render_to_response(context) return self.render_to_response(context)

View File

@ -411,3 +411,23 @@ class GetContextDataTest(unittest.TestCase):
# test that kwarg overrides values assigned higher up # test that kwarg overrides values assigned higher up
context = test_view.get_context_data(test_name='test_value') context = test_view.get_context_data(test_name='test_value')
self.assertEqual(context['test_name'], 'test_value') self.assertEqual(context['test_name'], 'test_value')
class UseMultipleObjectMixinTest(unittest.TestCase):
rf = RequestFactory()
def test_use_queryset_from_view(self):
test_view = views.CustomMultipleObjectMixinView()
test_view.get(self.rf.get('/'))
# Don't pass queryset as argument
context = test_view.get_context_data()
self.assertEqual(context['object_list'], test_view.queryset)
def test_overwrite_queryset(self):
test_view = views.CustomMultipleObjectMixinView()
test_view.get(self.rf.get('/'))
queryset = [{'name': 'Lennon'}, {'name': 'Ono'}]
self.assertNotEqual(test_view.queryset, queryset)
# Overwrite the view's queryset with queryset from kwarg
context = test_view.get_context_data(object_list=queryset)
self.assertEqual(context['object_list'], queryset)

View File

@ -201,6 +201,17 @@ class BookDetailGetObjectCustomQueryset(BookDetail):
return super(BookDetailGetObjectCustomQueryset,self).get_object( return super(BookDetailGetObjectCustomQueryset,self).get_object(
queryset=Book.objects.filter(pk=2)) queryset=Book.objects.filter(pk=2))
class CustomMultipleObjectMixinView(generic.list.MultipleObjectMixin, generic.View):
queryset = [
{'name': 'John'},
{'name': 'Yoko'},
]
def get(self, request):
self.object_list = self.get_queryset()
class CustomContextView(generic.detail.SingleObjectMixin, generic.View): class CustomContextView(generic.detail.SingleObjectMixin, generic.View):
model = Book model = Book
object = Book(name='dummy') object = Book(name='dummy')