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
* grubberr
* Paul Aliagas
* Paul Cunnane

View File

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

View File

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