mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[5.2.x] Fixed #36122 -- Raised FieldError when updating with composite reference value.
Thanks Jacob Walls for the report and test.
Backport of efec74b908 from main.
			
			
This commit is contained in:
		
				
					committed by
					
						 Sarah Boyce
						Sarah Boyce
					
				
			
			
				
	
			
			
			
						parent
						
							9fe17213a6
						
					
				
				
					commit
					d4d2e09f19
				
			| @@ -2019,6 +2019,11 @@ class SQLUpdateCompiler(SQLCompiler): | ||||
|                         "Window expressions are not allowed in this query " | ||||
|                         "(%s=%r)." % (field.name, val) | ||||
|                     ) | ||||
|                 if isinstance(val, ColPairs): | ||||
|                     raise FieldError( | ||||
|                         "Composite primary keys expressions are not allowed " | ||||
|                         "in this query (%s=F('pk'))." % field.name | ||||
|                     ) | ||||
|             elif hasattr(val, "prepare_database_save"): | ||||
|                 if field.remote_field: | ||||
|                     val = val.prepare_database_save(field) | ||||
|   | ||||
| @@ -1,5 +1,6 @@ | ||||
| from django.core.exceptions import FieldError | ||||
| from django.db import connection | ||||
| from django.db.models import F | ||||
| from django.test import TestCase | ||||
|  | ||||
| from .models import Comment, Tenant, TimeStamped, Token, User | ||||
| @@ -182,3 +183,11 @@ class CompositePKUpdateTests(TestCase): | ||||
|         msg = "Composite primary key fields must be updated individually." | ||||
|         with self.assertRaisesMessage(FieldError, msg): | ||||
|             qs.update(pk=(1, 10)) | ||||
|  | ||||
|     def test_update_value_not_composite(self): | ||||
|         msg = ( | ||||
|             "Composite primary keys expressions are not allowed in this " | ||||
|             "query (text=F('pk'))." | ||||
|         ) | ||||
|         with self.assertRaisesMessage(FieldError, msg): | ||||
|             Comment.objects.update(text=F("pk")) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user