mirror of https://github.com/django/django.git
[1.8.x] Reverted "Fixed #6785 -- Made QuerySet.get() fetch a limited number of rows."
This reverts commitda79ccca1d
. This optimized the unsuccessful case at the expense of the successful one. Backport of293fd5da5b
from master
This commit is contained in:
parent
3d3c7a62c8
commit
7060ef7158
|
@ -23,10 +23,6 @@ from django.utils import six
|
|||
from django.utils import timezone
|
||||
from django.utils.version import get_version
|
||||
|
||||
# The maximum number (one less than the max to be precise) of results to fetch
|
||||
# in a get() query
|
||||
MAX_GET_RESULTS = 20
|
||||
|
||||
# The maximum number of items to display in a QuerySet.__repr__
|
||||
REPR_OUTPUT_SIZE = 20
|
||||
|
||||
|
@ -326,21 +322,17 @@ class QuerySet(object):
|
|||
clone = self.filter(*args, **kwargs)
|
||||
if self.query.can_filter():
|
||||
clone = clone.order_by()
|
||||
if (not clone.query.select_for_update or
|
||||
connections[self.db].features.supports_select_for_update_with_limit):
|
||||
clone = clone[:MAX_GET_RESULTS + 1]
|
||||
num = len(clone)
|
||||
if num == 1:
|
||||
return clone._result_cache[0]
|
||||
if not num:
|
||||
raise self.model.DoesNotExist(
|
||||
"%s matching query does not exist." %
|
||||
self.model._meta.object_name)
|
||||
raise self.model.MultipleObjectsReturned(
|
||||
"get() returned more than one %s -- it returned %s!" % (
|
||||
self.model._meta.object_name,
|
||||
num if num <= MAX_GET_RESULTS else 'more than %s' % MAX_GET_RESULTS
|
||||
self.model._meta.object_name
|
||||
)
|
||||
raise self.model.MultipleObjectsReturned(
|
||||
"get() returned more than one %s -- it returned %s!" %
|
||||
(self.model._meta.object_name, num)
|
||||
)
|
||||
|
||||
def create(self, **kwargs):
|
||||
|
|
|
@ -10,7 +10,7 @@ from django.db import DatabaseError
|
|||
from django.db.models.fields import Field
|
||||
from django.db.models.fields.related import ForeignObjectRel
|
||||
from django.db.models.manager import BaseManager
|
||||
from django.db.models.query import QuerySet, EmptyQuerySet, ValuesListQuerySet, MAX_GET_RESULTS
|
||||
from django.db.models.query import QuerySet, EmptyQuerySet, ValuesListQuerySet
|
||||
from django.test import TestCase, TransactionTestCase, skipIfDBFeature, skipUnlessDBFeature
|
||||
from django.utils import six
|
||||
from django.utils.translation import ugettext_lazy
|
||||
|
@ -178,30 +178,6 @@ class ModelTest(TestCase):
|
|||
|
||||
self.assertNotEqual(Article.objects.get(id__exact=a1.id), Article.objects.get(id__exact=a2.id))
|
||||
|
||||
def test_multiple_objects_max_num_fetched(self):
|
||||
"""
|
||||
#6785 - get() should fetch a limited number of results.
|
||||
"""
|
||||
Article.objects.bulk_create(
|
||||
Article(headline='Area %s' % i, pub_date=datetime(2005, 7, 28))
|
||||
for i in range(MAX_GET_RESULTS)
|
||||
)
|
||||
six.assertRaisesRegex(
|
||||
self,
|
||||
MultipleObjectsReturned,
|
||||
"get\(\) returned more than one Article -- it returned %d!" % MAX_GET_RESULTS,
|
||||
Article.objects.get,
|
||||
headline__startswith='Area',
|
||||
)
|
||||
Article.objects.create(headline='Area %s' % MAX_GET_RESULTS, pub_date=datetime(2005, 7, 28))
|
||||
six.assertRaisesRegex(
|
||||
self,
|
||||
MultipleObjectsReturned,
|
||||
"get\(\) returned more than one Article -- it returned more than %d!" % MAX_GET_RESULTS,
|
||||
Article.objects.get,
|
||||
headline__startswith='Area',
|
||||
)
|
||||
|
||||
@skipUnlessDBFeature('supports_microsecond_precision')
|
||||
def test_microsecond_precision(self):
|
||||
# In PostgreSQL, microsecond-level precision is available.
|
||||
|
|
Loading…
Reference in New Issue