mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #14672 - Added admin handling for on_delete=PROTECT. Thanks to jtiai for the report.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@15249 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -29,11 +29,12 @@ from django.utils.translation import activate, deactivate
|
||||
from django.utils import unittest
|
||||
|
||||
# local test models
|
||||
from models import Article, BarAccount, CustomArticle, EmptyModel, \
|
||||
FooAccount, Gallery, ModelWithStringPrimaryKey, \
|
||||
Person, Persona, Picture, Podcast, Section, Subscriber, Vodcast, \
|
||||
Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit, \
|
||||
Category, Post, Plot, FunkyTag, Chapter, Book, Promo, WorkHour, Employee
|
||||
from models import (Article, BarAccount, CustomArticle, EmptyModel,
|
||||
FooAccount, Gallery, ModelWithStringPrimaryKey,
|
||||
Person, Persona, Picture, Podcast, Section, Subscriber, Vodcast,
|
||||
Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit,
|
||||
Category, Post, Plot, FunkyTag, Chapter, Book, Promo, WorkHour, Employee,
|
||||
Question, Answer)
|
||||
|
||||
|
||||
class AdminViewBasicTest(TestCase):
|
||||
@@ -884,6 +885,15 @@ class AdminViewDeletedObjectsTest(TestCase):
|
||||
self.assertContains(response, "your account doesn't have permission to delete the following types of objects")
|
||||
self.assertContains(response, "<li>plot details</li>")
|
||||
|
||||
def test_protected(self):
|
||||
q = Question.objects.create(question="Why?")
|
||||
a1 = Answer.objects.create(question=q, answer="Because.")
|
||||
a2 = Answer.objects.create(question=q, answer="Yes.")
|
||||
|
||||
response = self.client.get("/test_admin/admin/admin_views/question/%s/delete/" % quote(q.pk))
|
||||
self.assertContains(response, "would require deleting the following protected related objects")
|
||||
self.assertContains(response, '<li>Answer: <a href="/test_admin/admin/admin_views/answer/%s/">Because.</a></li>' % a1.pk)
|
||||
self.assertContains(response, '<li>Answer: <a href="/test_admin/admin/admin_views/answer/%s/">Yes.</a></li>' % a2.pk)
|
||||
|
||||
def test_not_registered(self):
|
||||
should_contain = """<li>Secret hideout: underground bunker"""
|
||||
@@ -1627,6 +1637,28 @@ class AdminActionsTest(TestCase):
|
||||
response = self.client.post('/test_admin/admin/admin_views/subscriber/', delete_confirmation_data)
|
||||
self.assertEqual(Subscriber.objects.count(), 0)
|
||||
|
||||
def test_model_admin_default_delete_action_protected(self):
|
||||
"""
|
||||
Tests the default delete action defined as a ModelAdmin method in the
|
||||
case where some related objects are protected from deletion.
|
||||
"""
|
||||
q1 = Question.objects.create(question="Why?")
|
||||
a1 = Answer.objects.create(question=q1, answer="Because.")
|
||||
a2 = Answer.objects.create(question=q1, answer="Yes.")
|
||||
q2 = Question.objects.create(question="Wherefore?")
|
||||
|
||||
action_data = {
|
||||
ACTION_CHECKBOX_NAME: [q1.pk, q2.pk],
|
||||
'action' : 'delete_selected',
|
||||
'index': 0,
|
||||
}
|
||||
|
||||
response = self.client.post("/test_admin/admin/admin_views/question/", action_data)
|
||||
|
||||
self.assertContains(response, "would require deleting the following protected related objects")
|
||||
self.assertContains(response, '<li>Answer: <a href="/test_admin/admin/admin_views/answer/%s/">Because.</a></li>' % a1.pk)
|
||||
self.assertContains(response, '<li>Answer: <a href="/test_admin/admin/admin_views/answer/%s/">Yes.</a></li>' % a2.pk)
|
||||
|
||||
def test_custom_function_mail_action(self):
|
||||
"Tests a custom action defined in a function"
|
||||
action_data = {
|
||||
|
||||
Reference in New Issue
Block a user