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 Changes in dev
============== ==============
- Fixed limit skip bug
- Added values_list for returning a list of data - Added values_list for returning a list of data
- Improved Inheritance / Mixin - Improved Inheritance / Mixin
- Added sharding support - Added sharding support

View File

@ -640,7 +640,7 @@ class QuerySet(object):
obj.sort(self._ordering) obj.sort(self._ordering)
if self._limit is not None: if self._limit is not None:
obj.limit(self._limit) obj.limit(self._limit - (self._skip or 0))
if self._skip is not None: if self._skip is not None:
obj.skip(self._skip) 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.http import Http404
from django.template import Context, Template from django.template import Context, Template
from django.conf import settings from django.conf import settings
from django.core.paginator import Paginator
settings.configure() settings.configure()
class QuerySetTest(unittest.TestCase): class QuerySetTest(unittest.TestCase):
@ -67,3 +69,22 @@ class QuerySetTest(unittest.TestCase):
self.assertRaises(Http404, get_document_or_404, self.Person, pk='1234') self.assertRaises(Http404, get_document_or_404, self.Person, pk='1234')
self.assertEqual(p, get_document_or_404(self.Person, pk=p.pk)) 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))