Fixed pagination limit / skip bug

fixes #398
This commit is contained in:
Ross Lawley 2012-01-16 09:03:12 +00:00
parent 39a20ea471
commit 1afe7240f4
3 changed files with 34 additions and 12 deletions

View File

@ -5,6 +5,7 @@ Changelog
Changes in dev
==============
- Fixed limit skip bug
- Added values_list for returning a list of data
- Improved Inheritance / Mixin
- Added sharding support

View File

@ -640,7 +640,7 @@ class QuerySet(object):
obj.sort(self._ordering)
if self._limit is not None:
obj.limit(self._limit)
obj.limit(self._limit - (self._skip or 0))
if self._skip is not None:
obj.skip(self._skip)

View File

@ -8,6 +8,8 @@ from mongoengine.django.shortcuts import get_document_or_404
from django.http import Http404
from django.template import Context, Template
from django.conf import settings
from django.core.paginator import Paginator
settings.configure()
class QuerySetTest(unittest.TestCase):
@ -67,3 +69,22 @@ class QuerySetTest(unittest.TestCase):
self.assertRaises(Http404, get_document_or_404, self.Person, pk='1234')
self.assertEqual(p, get_document_or_404(self.Person, pk=p.pk))
def test_pagination(self):
"""Ensure that Pagination works as expected
"""
class Page(Document):
name = StringField()
Page.drop_collection()
for i in xrange(1, 11):
Page(name=str(i)).save()
paginator = Paginator(Page.objects.all(), 2)
t = Template("{% for i in page.object_list %}{{ i.name }}:{% endfor %}")
for p in paginator.page_range:
d = {"page": paginator.page(p)}
end = p * 2
start = end - 1
self.assertEqual(t.render(Context(d)), u'%d:%d:' % (start, end))