mirror of https://github.com/django/django.git
Fixed #26235 -- Handled ProtectedError in a POST to admin's delete_view().
This commit is contained in:
parent
abf07355aa
commit
49ac10b4de
|
@ -1684,7 +1684,7 @@ class ModelAdmin(BaseModelAdmin):
|
||||||
(deleted_objects, model_count, perms_needed, protected) = get_deleted_objects(
|
(deleted_objects, model_count, perms_needed, protected) = get_deleted_objects(
|
||||||
[obj], opts, request.user, self.admin_site, using)
|
[obj], opts, request.user, self.admin_site, using)
|
||||||
|
|
||||||
if request.POST: # The user has already confirmed the deletion.
|
if request.POST and not protected: # The user has confirmed the deletion.
|
||||||
if perms_needed:
|
if perms_needed:
|
||||||
raise PermissionDenied
|
raise PermissionDenied
|
||||||
obj_display = force_text(obj)
|
obj_display = force_text(obj)
|
||||||
|
|
|
@ -2062,6 +2062,18 @@ class AdminViewDeletedObjectsTest(TestCase):
|
||||||
'<li>Answer: <a href="%s">Yes.</a></li>' % reverse('admin:admin_views_answer_change', args=(a2.pk,))
|
'<li>Answer: <a href="%s">Yes.</a></li>' % reverse('admin:admin_views_answer_change', args=(a2.pk,))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def test_post_delete_protected(self):
|
||||||
|
"""
|
||||||
|
A POST request to delete protected objects should display the page
|
||||||
|
which says the deletion is prohibited.
|
||||||
|
"""
|
||||||
|
q = Question.objects.create(question='Why?')
|
||||||
|
a = Answer.objects.create(question=q, answer='Because.')
|
||||||
|
|
||||||
|
response = self.client.post(reverse('admin:admin_views_question_delete', args=(q.pk,)), {'post': 'yes'})
|
||||||
|
self.assertEqual(Question.objects.count(), 1)
|
||||||
|
self.assertContains(response, "would require deleting the following protected related objects")
|
||||||
|
|
||||||
def test_not_registered(self):
|
def test_not_registered(self):
|
||||||
should_contain = """<li>Secret hideout: underground bunker"""
|
should_contain = """<li>Secret hideout: underground bunker"""
|
||||||
response = self.client.get(reverse('admin:admin_views_villain_delete', args=(self.v1.pk,)))
|
response = self.client.get(reverse('admin:admin_views_villain_delete', args=(self.v1.pk,)))
|
||||||
|
|
Loading…
Reference in New Issue