summaryrefslogtreecommitdiff
path: root/tests/admin_views
diff options
context:
space:
mode:
Diffstat (limited to 'tests/admin_views')
-rw-r--r--tests/admin_views/admin.py10
-rw-r--r--tests/admin_views/tests.py17
2 files changed, 26 insertions, 1 deletions
diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py
index 9241034ffb..690de8d45c 100644
--- a/tests/admin_views/admin.py
+++ b/tests/admin_views/admin.py
@@ -358,6 +358,14 @@ class PersonAdmin(admin.ModelAdmin):
return super().get_queryset(request).order_by("age")
+class ParentWithUUIDPKAdmin(admin.ModelAdmin):
+ list_display = ("id", "title")
+ list_editable = ("title",)
+
+ def has_add_permission(self, request):
+ return False
+
+
class FooAccountAdmin(admin.StackedInline):
model = FooAccount
extra = 1
@@ -1244,7 +1252,7 @@ site.register(ReferencedByInline)
site.register(InlineReferer, InlineRefererAdmin)
site.register(ReferencedByGenRel)
site.register(GenRelReference)
-site.register(ParentWithUUIDPK)
+site.register(ParentWithUUIDPK, ParentWithUUIDPKAdmin)
site.register(RelatedPrepopulated, search_fields=["name"])
site.register(RelatedWithUUIDPKModel)
site.register(ReadOnlyRelatedField, ReadOnlyRelatedFieldAdmin)
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index f40415681a..ddc7254958 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -2,6 +2,7 @@ import datetime
import os
import re
import unittest
+from http import HTTPStatus
from unittest import mock
from urllib.parse import parse_qsl, urljoin, urlparse
@@ -4100,6 +4101,22 @@ class AdminViewListEditable(TestCase):
self.assertIs(Person.objects.get(name="John Mauchly").alive, False)
+ def test_forged_post_submission_when_no_add_permission(self):
+ before_count = ParentWithUUIDPK.objects.count()
+ data = {
+ "form-TOTAL_FORMS": "1",
+ "form-INITIAL_FORMS": "0",
+ "form-MAX_NUM_FORMS": "0",
+ "form-0-title": "The News",
+ "form-0-id": "",
+ "_save": "Save",
+ }
+ # This model admin allows no add permissions.
+ changelist_url = reverse("admin:admin_views_parentwithuuidpk_changelist")
+ response = self.client.post(changelist_url, data)
+ self.assertEqual(response.status_code, HTTPStatus.BAD_REQUEST)
+ self.assertEqual(ParentWithUUIDPK.objects.count(), before_count)
+
def test_non_field_errors(self):
"""
Non-field errors are displayed for each of the forms in the