Improvements to .get() efficiency

Closes #307 and #290
This commit is contained in:
Ross Lawley 2011-10-08 08:06:23 -07:00
parent fb70b47acb
commit 268908b3b2
3 changed files with 11 additions and 7 deletions

View File

@ -69,3 +69,4 @@ that much better:
* John Arnfield * John Arnfield
* grubberr * grubberr
* Paul Aliagas * Paul Aliagas
* Paul Cunnane

View File

@ -6,6 +6,7 @@ Changelog
Changes in dev Changes in dev
============== ==============
- Improved efficiency of .get()
- Updated ComplexFields so if required they won't accept empty lists / dicts - Updated ComplexFields so if required they won't accept empty lists / dicts
- Added spec file for rpm-based distributions - Added spec file for rpm-based distributions
- Fixed ListField so it doesnt accept strings - Fixed ListField so it doesnt accept strings

View File

@ -728,15 +728,17 @@ class QuerySet(object):
.. versionadded:: 0.3 .. versionadded:: 0.3
""" """
self.__call__(*q_objs, **query) self.__call__(*q_objs, **query)
count = self.count() try:
if count == 1: result1 = self[0]
return self[0] except IndexError:
elif count > 1:
message = u'%d items returned, instead of 1' % count
raise self._document.MultipleObjectsReturned(message)
else:
raise self._document.DoesNotExist("%s matching query does not exist." raise self._document.DoesNotExist("%s matching query does not exist."
% self._document._class_name) % self._document._class_name)
try:
result2 = self[1]
except IndexError:
return result1
message = u'%d items returned, instead of 1' % self.count()
raise self._document.MultipleObjectsReturned(message)
def get_or_create(self, write_options=None, *q_objs, **query): def get_or_create(self, write_options=None, *q_objs, **query):
"""Retrieve unique object or create, if it doesn't exist. Returns a tuple of """Retrieve unique object or create, if it doesn't exist. Returns a tuple of