mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.11.x] Fixed #27800 -- Fixed QuerySet.annotate(Length(...)).distinct() crash.
Backport of ac5f886c56 from master
			
			
This commit is contained in:
		
							
								
								
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								AUTHORS
									
									
									
									
									
								
							| @@ -456,6 +456,7 @@ answer newbie questions, and generally made Django that much better: | ||||
|     Leo Shklovskii | ||||
|     Leo Soto <leo.soto@gmail.com> | ||||
|     lerouxb@gmail.com | ||||
|     Lex Berezhny <lex@damoti.com> | ||||
|     Liang Feng <hutuworm@gmail.com> | ||||
|     limodou | ||||
|     Loek van Gent <loek@barakken.nl> | ||||
|   | ||||
| @@ -1345,7 +1345,12 @@ class Query(object): | ||||
|                         "querying. If it is a GenericForeignKey, consider " | ||||
|                         "adding a GenericRelation." % name | ||||
|                     ) | ||||
|                 model = field.model._meta.concrete_model | ||||
|                 try: | ||||
|                     model = field.model._meta.concrete_model | ||||
|                 except AttributeError: | ||||
|                     # QuerySet.annotate() may introduce fields that aren't | ||||
|                     # attached to a model. | ||||
|                     model = None | ||||
|             else: | ||||
|                 # We didn't find the current field, so move position back | ||||
|                 # one step. | ||||
|   | ||||
| @@ -8,7 +8,7 @@ from django.db.models import ( | ||||
|     BooleanField, CharField, Count, DateTimeField, ExpressionWrapper, F, Func, | ||||
|     IntegerField, NullBooleanField, Q, Sum, Value, | ||||
| ) | ||||
| from django.db.models.functions import Lower | ||||
| from django.db.models.functions import Length, Lower | ||||
| from django.test import TestCase, skipUnlessDBFeature | ||||
| from django.utils import six | ||||
|  | ||||
| @@ -208,6 +208,11 @@ class NonAggregateAnnotationTestCase(TestCase): | ||||
|         ).distinct('test_alias') | ||||
|         self.assertEqual(len(people2), 1) | ||||
|  | ||||
|         lengths = Employee.objects.annotate( | ||||
|             name_len=Length('first_name'), | ||||
|         ).distinct('name_len').values_list('name_len', flat=True) | ||||
|         self.assertSequenceEqual(lengths, [3, 7, 8]) | ||||
|  | ||||
|     def test_filter_annotation(self): | ||||
|         books = Book.objects.annotate( | ||||
|             is_book=Value(1, output_field=IntegerField()) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user