From 380d77cccefbe185ddb3f9368d8fdeb7b7cf7108 Mon Sep 17 00:00:00 2001 From: Sean Helvey Date: Wed, 11 Feb 2026 15:07:40 -0800 Subject: Fixed #36921 -- Fixed KeyError in inline form for model not registered with admin. Regression in b1ffa9a9d78b0c2c5ad6ed5a1d84e380d5cfd010. --- tests/admin_views/tests.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'tests') diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index 7f35d7c2f4..fa9d9a2dc6 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -589,6 +589,31 @@ class AdminViewBasicTest(AdminViewBasicTestCase): self.assertIn("admin_views.nonexistent", str(messages[0])) self.assertIn("could not be found", str(messages[0])) + def test_popup_add_POST_with_unregistered_source_model(self): + """ + Popup add where source_model is a valid Django model but is not + registered in the admin site (e.g. a model only used as an inline) + should succeed without raising a KeyError. + """ + post_data = { + IS_POPUP_VAR: "1", + # Chapter exists as a model but is not registered in site (only + # in site6), simulating a model used only as an inline. + SOURCE_MODEL_VAR: "admin_views.chapter", + "title": "Test Article", + "content": "some content", + "date_0": "2010-09-10", + "date_1": "14:55:39", + } + response = self.client.post(reverse("admin:admin_views_article_add"), post_data) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "data-popup-response") + # No error messages - unregistered model is silently skipped. + messages = list(response.wsgi_request._messages) + self.assertEqual(len(messages), 0) + # No optgroup in the response. + self.assertNotContains(response, ""optgroup"") + def test_basic_edit_POST(self): """ A smoke test to ensure POST on edit_view works. -- cgit v1.3