diff options
Diffstat (limited to 'django')
| -rw-r--r-- | django/db/models/base.py | 10 |
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] |
