summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorSelwin Ong <selwin.ong@gmail.com>2013-05-21 18:35:12 +0300
committerAnssi Kääriäinen <akaariai@gmail.com>2013-05-21 18:52:28 +0300
commitea9a0857d4922fab1f9146f3a7828b67281edc89 (patch)
tree0e4b9751c8731a839f1dfeb06f6d63dc25b05eda /django
parentd595b61acae91e6111ec26cb0a4a1b1a9f4eb0d5 (diff)
Fixed #19326 -- Added first() and last() methods to QuerySet
Diffstat (limited to 'django')
-rw-r--r--django/db/models/manager.py6
-rw-r--r--django/db/models/query.py20
2 files changed, 26 insertions, 0 deletions
diff --git a/django/db/models/manager.py b/django/db/models/manager.py
index 43a8264f11..a1aa79f809 100644
--- a/django/db/models/manager.py
+++ b/django/db/models/manager.py
@@ -186,6 +186,12 @@ class Manager(six.with_metaclass(RenameManagerMethods)):
def latest(self, *args, **kwargs):
return self.get_queryset().latest(*args, **kwargs)
+ def first(self):
+ return self.get_queryset().first()
+
+ def last(self):
+ return self.get_queryset().last()
+
def order_by(self, *args, **kwargs):
return self.get_queryset().order_by(*args, **kwargs)
diff --git a/django/db/models/query.py b/django/db/models/query.py
index 4313d044ee..f2015f57a8 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -498,6 +498,26 @@ class QuerySet(object):
def latest(self, field_name=None):
return self._earliest_or_latest(field_name=field_name, direction="-")
+ def first(self):
+ """
+ Returns the first object of a query, returns None if no match is found.
+ """
+ qs = self if self.ordered else self.order_by('pk')
+ try:
+ return qs[0]
+ except IndexError:
+ return None
+
+ def last(self):
+ """
+ Returns the last object of a query, returns None if no match is found.
+ """
+ qs = self.reverse() if self.ordered else self.order_by('-pk')
+ try:
+ return qs[0]
+ except IndexError:
+ return None
+
def in_bulk(self, id_list):
"""
Returns a dictionary mapping each of the given IDs to the object with