mirror of
https://github.com/django/django.git
synced 2024-12-22 17:16:24 +00:00
Fixed #19938 -- Consumed iterator only once in paginator's Page
Thanks Joshua Fialkoff for the report.
This commit is contained in:
parent
2ee447fb5f
commit
31f6421b13
@ -121,7 +121,9 @@ class Page(collections.Sequence):
|
||||
raise TypeError
|
||||
# The object_list is converted to a list so that if it was a QuerySet
|
||||
# it won't be a database hit per __getitem__.
|
||||
return list(self.object_list)[index]
|
||||
if not isinstance(self.object_list, list):
|
||||
self.object_list = list(self.object_list)
|
||||
return self.object_list[index]
|
||||
|
||||
def has_next(self):
|
||||
return self.number < self.paginator.num_pages
|
||||
|
@ -297,6 +297,7 @@ class ModelPaginationTests(TestCase):
|
||||
self.assertIsNone(p.object_list._result_cache)
|
||||
self.assertRaises(TypeError, lambda: p['has_previous'])
|
||||
self.assertIsNone(p.object_list._result_cache)
|
||||
self.assertNotIsInstance(p.object_list, list)
|
||||
|
||||
# Make sure slicing the Page object with numbers and slice objects work.
|
||||
self.assertEqual(p[0], Article.objects.get(headline='Article 1'))
|
||||
@ -305,3 +306,5 @@ class ModelPaginationTests(TestCase):
|
||||
"<Article: Article 2>",
|
||||
]
|
||||
)
|
||||
# After __getitem__ is called, object_list is a list
|
||||
self.assertIsInstance(p.object_list, list)
|
||||
|
Loading…
Reference in New Issue
Block a user