Merge pull request #1884 from erdenezul/limit_behavior
Clone of Limit behavior pr #1614
This commit is contained in:
commit
d17cac8210
@ -2,6 +2,11 @@
|
|||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
Development
|
||||||
|
===========
|
||||||
|
- QuerySet limit function behaviour: Passing 0 as parameter will return all the documents in the cursor #1611
|
||||||
|
- (Fill this out as you fix issues and develop your features).
|
||||||
|
=======
|
||||||
Changes in 0.15.4
|
Changes in 0.15.4
|
||||||
=================
|
=================
|
||||||
- Added `DateField` #513
|
- Added `DateField` #513
|
||||||
|
@ -396,7 +396,7 @@ class BaseQuerySet(object):
|
|||||||
:meth:`skip` that has been applied to this cursor into account when
|
:meth:`skip` that has been applied to this cursor into account when
|
||||||
getting the count
|
getting the count
|
||||||
"""
|
"""
|
||||||
if self._limit == 0 and with_limit_and_skip or self._none:
|
if self._limit == 0 and with_limit_and_skip is False or self._none:
|
||||||
return 0
|
return 0
|
||||||
return self._cursor.count(with_limit_and_skip=with_limit_and_skip)
|
return self._cursor.count(with_limit_and_skip=with_limit_and_skip)
|
||||||
|
|
||||||
@ -775,10 +775,11 @@ class BaseQuerySet(object):
|
|||||||
"""Limit the number of returned documents to `n`. This may also be
|
"""Limit the number of returned documents to `n`. This may also be
|
||||||
achieved using array-slicing syntax (e.g. ``User.objects[:5]``).
|
achieved using array-slicing syntax (e.g. ``User.objects[:5]``).
|
||||||
|
|
||||||
:param n: the maximum number of objects to return
|
:param n: the maximum number of objects to return if n is greater than 0.
|
||||||
|
When 0 is passed, returns all the documents in the cursor
|
||||||
"""
|
"""
|
||||||
queryset = self.clone()
|
queryset = self.clone()
|
||||||
queryset._limit = n if n != 0 else 1
|
queryset._limit = n
|
||||||
|
|
||||||
# If a cursor object has already been created, apply the limit to it.
|
# If a cursor object has already been created, apply the limit to it.
|
||||||
if queryset._cursor_obj:
|
if queryset._cursor_obj:
|
||||||
|
@ -125,6 +125,11 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
self.assertEqual(len(people2), 1)
|
self.assertEqual(len(people2), 1)
|
||||||
self.assertEqual(people2[0], user_a)
|
self.assertEqual(people2[0], user_a)
|
||||||
|
|
||||||
|
# Test limit with 0 as parameter
|
||||||
|
people = self.Person.objects.limit(0)
|
||||||
|
self.assertEqual(people.count(with_limit_and_skip=True), 2)
|
||||||
|
self.assertEqual(len(people), 2)
|
||||||
|
|
||||||
# Test chaining of only after limit
|
# Test chaining of only after limit
|
||||||
person = self.Person.objects().limit(1).only('name').first()
|
person = self.Person.objects().limit(1).only('name').first()
|
||||||
self.assertEqual(person, user_a)
|
self.assertEqual(person, user_a)
|
||||||
@ -5272,6 +5277,16 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
# in a way we'd expect) should raise a TypeError, too
|
# in a way we'd expect) should raise a TypeError, too
|
||||||
self.assertRaises(TypeError, BlogPost.objects(authors__in=author).count)
|
self.assertRaises(TypeError, BlogPost.objects(authors__in=author).count)
|
||||||
|
|
||||||
|
def test_create_count(self):
|
||||||
|
self.Person.drop_collection()
|
||||||
|
self.Person.objects.create(name="Foo")
|
||||||
|
self.Person.objects.create(name="Bar")
|
||||||
|
self.Person.objects.create(name="Baz")
|
||||||
|
self.assertEqual(self.Person.objects.count(with_limit_and_skip=True), 3)
|
||||||
|
|
||||||
|
newPerson = self.Person.objects.create(name="Foo_1")
|
||||||
|
self.assertEqual(self.Person.objects.count(with_limit_and_skip=True), 4)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user