diff options
| author | Anssi Kääriäinen <akaariai@gmail.com> | 2013-05-20 18:45:24 +0300 |
|---|---|---|
| committer | Anssi Kääriäinen <akaariai@gmail.com> | 2013-05-20 19:05:43 +0300 |
| commit | 0eddedf7db782a05e098c7024a9056aef7283b81 (patch) | |
| tree | 76849b94b0cbaf61f8fb9fb4f8b6a324c1759c03 | |
| parent | 367089a846b7546c98e1c6543b36bfc3b19ee9e8 (diff) | |
[1.5.x] Fixed #20278 -- ensured .get() exceptions do not recurse infinitely
A regression caused by d5b93d3281fe93cbef5de84a52 made .get() error
reporting recurse infinitely on certain rare conditions. Fixed this by
not trying to print the given lookup kwargs.
Backpatch of 266c0bb23e9d64c47ace4d162e582febd5a1e336
| -rw-r--r-- | django/db/models/query.py | 10 | ||||
| -rw-r--r-- | tests/modeltests/basic/models.py | 8 | ||||
| -rw-r--r-- | tests/modeltests/basic/tests.py | 23 |
3 files changed, 21 insertions, 20 deletions
diff --git a/django/db/models/query.py b/django/db/models/query.py index 952739e939..292769303d 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -384,13 +384,11 @@ class QuerySet(object): return clone._result_cache[0] if not num: raise self.model.DoesNotExist( - "%s matching query does not exist. " - "Lookup parameters were %s" % - (self.model._meta.object_name, kwargs)) + "%s matching query does not exist." % + self.model._meta.object_name) raise self.model.MultipleObjectsReturned( - "get() returned more than one %s -- it returned %s! " - "Lookup parameters were %s" % - (self.model._meta.object_name, num, kwargs)) + "get() returned more than one %s -- it returned %s!" % + (self.model._meta.object_name, num)) def create(self, **kwargs): """ diff --git a/tests/modeltests/basic/models.py b/tests/modeltests/basic/models.py index 660beddf49..1bffcb9cda 100644 --- a/tests/modeltests/basic/models.py +++ b/tests/modeltests/basic/models.py @@ -18,3 +18,11 @@ class Article(models.Model): def __str__(self): return self.headline + +@python_2_unicode_compatible +class SelfRef(models.Model): + selfref = models.ForeignKey('self', null=True, blank=True, + related_name='+') + + def __str__(self): + return SelfRef.objects.get(selfref=self).pk diff --git a/tests/modeltests/basic/tests.py b/tests/modeltests/basic/tests.py index db8c079962..20dceedfab 100644 --- a/tests/modeltests/basic/tests.py +++ b/tests/modeltests/basic/tests.py @@ -8,7 +8,7 @@ from django.test import TestCase, skipIfDBFeature, skipUnlessDBFeature from django.utils import six from django.utils.translation import ugettext_lazy -from .models import Article +from .models import Article, SelfRef class ModelTest(TestCase): @@ -84,23 +84,14 @@ class ModelTest(TestCase): # parameters don't match any object. six.assertRaisesRegex(self, ObjectDoesNotExist, - "Article matching query does not exist. Lookup parameters were " - "{'id__exact': 2000}", + "Article matching query does not exist.", Article.objects.get, id__exact=2000, ) # To avoid dict-ordering related errors check only one lookup # in single assert. - six.assertRaisesRegex(self, - ObjectDoesNotExist, - ".*'pub_date__year': 2005.*", - Article.objects.get, - pub_date__year=2005, - pub_date__month=8, - ) - six.assertRaisesRegex(self, + self.assertRaises( ObjectDoesNotExist, - ".*'pub_date__month': 8.*", Article.objects.get, pub_date__year=2005, pub_date__month=8, @@ -108,8 +99,7 @@ class ModelTest(TestCase): six.assertRaisesRegex(self, ObjectDoesNotExist, - "Article matching query does not exist. Lookup parameters were " - "{'pub_date__week_day': 6}", + "Article matching query does not exist.", Article.objects.get, pub_date__week_day=6, ) @@ -639,3 +629,8 @@ class ModelTest(TestCase): Article.objects.bulk_create([Article(headline=lazy, pub_date=datetime.now())]) article = Article.objects.get() self.assertEqual(article.headline, notlazy) + + def test_ticket_20278(self): + sr = SelfRef.objects.create() + with self.assertRaises(ObjectDoesNotExist): + SelfRef.objects.get(selfref=sr) |
