Fixed #29129 -- Skipped UPDATE when adding a model instance with inherited primary key that has a default.
This commit is contained in:
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):
|
||||
|
|
Loading…
Reference in New Issue