mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.5.x] Fixed #20278 -- ensured .get() exceptions do not recurse infinitely
A regression caused byd5b93d3281made .get() error reporting recurse infinitely on certain rare conditions. Fixed this by not trying to print the given lookup kwargs. Backpatch of266c0bb23e
This commit is contained in:
		| @@ -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): | ||||
|         """ | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
| @@ -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, | ||||
|         self.assertRaises( | ||||
|             ObjectDoesNotExist, | ||||
|             ".*'pub_date__year': 2005.*", | ||||
|             Article.objects.get, | ||||
|             pub_date__year=2005, | ||||
|             pub_date__month=8, | ||||
|         ) | ||||
|         six.assertRaisesRegex(self, | ||||
|             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) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user