summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Somerville <matthew-github@dracos.co.uk>2013-04-10 11:27:28 +0100
committerMarkus Holtermann <info@markusholtermann.eu>2013-05-18 14:10:40 +0200
commit1c921cfac34daa9c18e4e235e20fa7beb8929f1c (patch)
tree98063da94f56bfeb5613a51a3d32b86b30163e54
parent9012a9e2000020493b881a5b79cc801c62180796 (diff)
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.
-rw-r--r--AUTHORS1
-rw-r--r--django/views/generic/list.py4
-rw-r--r--tests/generic_views/test_base.py20
-rw-r--r--tests/generic_views/views.py11
4 files changed, 34 insertions, 2 deletions
diff --git a/AUTHORS b/AUTHORS
index 3544e3b81a..70f8bb22d9 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -274,6 +274,7 @@ answer newbie questions, and generally made Django that much better:
Eric Holscher <http://ericholscher.com>
Ian Holsman <http://feh.holsman.net/>
Kieran Holland <http://www.kieranholland.com>
+ Markus Holtermann <http://markusholtermann.eu>
Sung-Jin Hong <serialx.net@gmail.com>
Leo "hylje" Honkanen <sealage@gmail.com>
Matt Hoskins <skaffenuk@googlemail.com>
diff --git a/django/views/generic/list.py b/django/views/generic/list.py
index 08c4bbcda0..1aff3454f4 100644
--- a/django/views/generic/list.py
+++ b/django/views/generic/list.py
@@ -105,7 +105,7 @@ class MultipleObjectMixin(ContextMixin):
"""
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)
context_object_name = self.get_context_object_name(queryset)
if page_size:
@@ -149,7 +149,7 @@ class BaseListView(MultipleObjectMixin, View):
if is_empty:
raise Http404(_("Empty list and '%(class_name)s.allow_empty' is False.")
% {'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)
diff --git a/tests/generic_views/test_base.py b/tests/generic_views/test_base.py
index 0e84e17132..2eadee2b42 100644
--- a/tests/generic_views/test_base.py
+++ b/tests/generic_views/test_base.py
@@ -411,3 +411,23 @@ class GetContextDataTest(unittest.TestCase):
# test that kwarg overrides values assigned higher up
context = test_view.get_context_data(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)
diff --git a/tests/generic_views/views.py b/tests/generic_views/views.py
index aa8777e8c6..4dda3fe0e0 100644
--- a/tests/generic_views/views.py
+++ b/tests/generic_views/views.py
@@ -201,6 +201,17 @@ class BookDetailGetObjectCustomQueryset(BookDetail):
return super(BookDetailGetObjectCustomQueryset,self).get_object(
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):
model = Book
object = Book(name='dummy')