mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	Fixed #29129 -- Skipped UPDATE when adding a model instance with inherited primary key that has a default.
This commit is contained in:
		
				
					committed by
					
						 Mariusz Felisiak
						Mariusz Felisiak
					
				
			
			
				
	
			
			
			
						parent
						
							7e15795bf0
						
					
				
				
					commit
					babd412685
				
			| @@ -855,8 +855,8 @@ class Model(metaclass=ModelBase): | ||||
|             not raw and | ||||
|             not force_insert and | ||||
|             self._state.adding and | ||||
|             self._meta.pk.default and | ||||
|             self._meta.pk.default is not NOT_PROVIDED | ||||
|             meta.pk.default and | ||||
|             meta.pk.default is not NOT_PROVIDED | ||||
|         ): | ||||
|             force_insert = True | ||||
|         # If possible, try an UPDATE. If that doesn't update anything, do an INSERT. | ||||
|   | ||||
| @@ -46,3 +46,7 @@ class SelfRef(models.Model): | ||||
|  | ||||
| class PrimaryKeyWithDefault(models.Model): | ||||
|     uuid = models.UUIDField(primary_key=True, default=uuid.uuid4) | ||||
|  | ||||
|  | ||||
| class ChildPrimaryKeyWithDefault(PrimaryKeyWithDefault): | ||||
|     pass | ||||
|   | ||||
| @@ -12,8 +12,8 @@ from django.test import ( | ||||
| from django.utils.translation import gettext_lazy | ||||
|  | ||||
| from .models import ( | ||||
|     Article, ArticleSelectOnSave, FeaturedArticle, PrimaryKeyWithDefault, | ||||
|     SelfRef, | ||||
|     Article, ArticleSelectOnSave, ChildPrimaryKeyWithDefault, FeaturedArticle, | ||||
|     PrimaryKeyWithDefault, SelfRef, | ||||
| ) | ||||
|  | ||||
|  | ||||
| @@ -139,6 +139,12 @@ class ModelInstanceCreationTests(TestCase): | ||||
|         with self.assertNumQueries(1): | ||||
|             PrimaryKeyWithDefault().save() | ||||
|  | ||||
|     def test_save_parent_primary_with_default(self): | ||||
|         # An UPDATE attempt is skipped when an inherited primary key has | ||||
|         # default. | ||||
|         with self.assertNumQueries(2): | ||||
|             ChildPrimaryKeyWithDefault().save() | ||||
|  | ||||
|  | ||||
| class ModelTest(TestCase): | ||||
|     def test_objects_attribute_is_only_available_on_the_class_itself(self): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user