mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #33482 -- Fixed QuerySet filtering againts negated Exists() with empty queryset.
Thanks Tobias Bengfort for the report.
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							770d3e6a4c
						
					
				
				
					commit
					b7d1da5a62
				
			| @@ -1211,13 +1211,18 @@ class Exists(Subquery): | ||||
|  | ||||
|     def as_sql(self, compiler, connection, template=None, **extra_context): | ||||
|         query = self.query.exists(using=connection.alias) | ||||
|         sql, params = super().as_sql( | ||||
|             compiler, | ||||
|             connection, | ||||
|             template=template, | ||||
|             query=query, | ||||
|             **extra_context, | ||||
|         ) | ||||
|         try: | ||||
|             sql, params = super().as_sql( | ||||
|                 compiler, | ||||
|                 connection, | ||||
|                 template=template, | ||||
|                 query=query, | ||||
|                 **extra_context, | ||||
|             ) | ||||
|         except EmptyResultSet: | ||||
|             if self.negated: | ||||
|                 return '', () | ||||
|             raise | ||||
|         if self.negated: | ||||
|             sql = 'NOT {}'.format(sql) | ||||
|         return sql, params | ||||
|   | ||||
| @@ -1905,6 +1905,13 @@ class ExistsTests(TestCase): | ||||
|         ) | ||||
|         self.assertNotIn('ORDER BY', captured_sql) | ||||
|  | ||||
|     def test_negated_empty_exists(self): | ||||
|         manager = Manager.objects.create() | ||||
|         qs = Manager.objects.filter( | ||||
|             ~Exists(Manager.objects.none()) & Q(pk=manager.pk) | ||||
|         ) | ||||
|         self.assertSequenceEqual(qs, [manager]) | ||||
|  | ||||
|  | ||||
| class FieldTransformTests(TestCase): | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user