summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
Diffstat (limited to 'django')
-rw-r--r--django/db/models/base.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/django/db/models/base.py b/django/db/models/base.py
index fc38224345..e28add30a9 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -718,9 +718,13 @@ class Model(object):
# Exclude the current object from the query if we are editing an
# instance (as opposed to creating a new one)
- if not self._state.adding and self.pk is not None:
- qs = qs.exclude(pk=self.pk)
-
+ # Note that we need to use the pk as defined by model_class, not
+ # self.pk. These can be different fields because model inheritance
+ # allows single model to have effectively multiple primary keys.
+ # Refs #17615.
+ model_class_pk = self._get_pk_val(model_class._meta)
+ if not self._state.adding and model_class_pk is not None:
+ qs = qs.exclude(pk=model_class_pk)
if qs.exists():
if len(unique_check) == 1:
key = unique_check[0]