diff --git a/django/contrib/admin/templates/admin/index.html b/django/contrib/admin/templates/admin/index.html index 9eb60b807138a..bf36a8d21e9f3 100644 --- a/django/contrib/admin/templates/admin/index.html +++ b/django/contrib/admin/templates/admin/index.html @@ -59,7 +59,19 @@

{% trans 'My Actions' %}

{% else %} {% endif %} diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index 4edfe27088c83..4aafa1947fd17 100644 --- a/tests/regressiontests/admin_views/tests.py +++ b/tests/regressiontests/admin_views/tests.py @@ -592,6 +592,26 @@ def test_recentactions_link(self): should_contain = """%s""" % (quote(self.pk), escape(self.pk)) self.assertContains(response, should_contain) + def test_recentactions_without_content_type(self): + "If a LogEntry is missing content_type it will not display it in span tag under the hyperlink." + response = self.client.get('/test_admin/admin/') + should_contain = """%s""" % (quote(self.pk), escape(self.pk)) + self.assertContains(response, should_contain) + should_contain = "Model with string primary key" # capitalized in Recent Actions + self.assertContains(response, should_contain) + logentry = LogEntry.objects.get(content_type__name__iexact=should_contain) + # http://code.djangoproject.com/ticket/10275 + # if the log entry doesn't have a content type it should still be + # possible to view the Recent Actions part + logentry.content_type = None + logentry.save() + + counted_presence_before = response.content.count(should_contain) + response = self.client.get('/test_admin/admin/') + counted_presence_after = response.content.count(should_contain) + self.assertEquals(counted_presence_before - 1, + counted_presence_after) + def test_deleteconfirmation_link(self): "The link from the delete confirmation page referring back to the changeform of the object should be quoted" response = self.client.get('/test_admin/admin/admin_views/modelwithstringprimarykey/%s/delete/' % quote(self.pk)) @@ -919,7 +939,7 @@ class AdminInlineFileUploadTest(TestCase): def setUp(self): self.client.login(username='super', password='secret') - + # Set up test Picture and Gallery. # These must be set up here instead of in fixtures in order to allow Picture # to use a NamedTemporaryFile. @@ -938,7 +958,7 @@ def tearDown(self): def test_inline_file_upload_edit_validation_error_post(self): """ - Test that inline file uploads correctly display prior data (#10002). + Test that inline file uploads correctly display prior data (#10002). """ post_data = { "name": u"Test Gallery",