diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index cce92c6a95..567f7cf990 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -501,7 +501,7 @@ class ModelAdmin(BaseModelAdmin): try: object_id = model._meta.pk.to_python(object_id) return queryset.get(pk=object_id) - except (model.DoesNotExist, ValidationError): + except (model.DoesNotExist, ValidationError, ValueError): return None def get_changelist_form(self, request, **kwargs): diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index 0bcfc0c034..ff2eb95745 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -124,13 +124,22 @@ class AdminViewBasicTest(TestCase): def testBasicEditGetStringPK(self): """ - A smoke test to ensure GET on the change_view works (returns an HTTP - 404 error, see #11191) when passing a string as the PK argument for a - model with an integer PK field. + Ensure GET on the change_view works (returns an HTTP 404 error, see + #11191) when passing a string as the PK argument for a model with an + integer PK field. """ response = self.client.get('/test_admin/%s/admin_views/section/abc/' % self.urlbit) self.assertEqual(response.status_code, 404) + def testBasicInheritanceGetStringPK(self): + """ + Ensure GET on the change_view works on inherited models (returns an + HTTP 404 error, see #19951) when passing a string as the PK argument + for a model with an integer PK field. + """ + response = self.client.get('/test_admin/%s/admin_views/supervillain/abc/' % self.urlbit) + self.assertEqual(response.status_code, 404) + def testBasicAddPost(self): """ A smoke test to ensure POST on add_view works.