summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhijeet Viswa <abhijeetviswa@gmail.com>2020-02-26 23:19:05 +0530
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-03-05 12:08:38 +0100
commitbabd4126853e48594b61e8db71a83d7bdd929b9c (patch)
treeef4fbc8fc6f46ee6d8f03de277f7a66fd465dec0
parent7e15795bf06d362f20257d2e9db378ba8940dc39 (diff)
Fixed #29129 -- Skipped UPDATE when adding a model instance with inherited primary key that has a default.
-rw-r--r--django/db/models/base.py4
-rw-r--r--tests/basic/models.py4
-rw-r--r--tests/basic/tests.py10
3 files changed, 14 insertions, 4 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index b47f4c287d..2555d8c1b5 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -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.
diff --git a/tests/basic/models.py b/tests/basic/models.py
index 7b2b1aee54..6dcdfa90c0 100644
--- a/tests/basic/models.py
+++ b/tests/basic/models.py
@@ -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
diff --git a/tests/basic/tests.py b/tests/basic/tests.py
index e186958400..22093f5a56 100644
--- a/tests/basic/tests.py
+++ b/tests/basic/tests.py
@@ -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):