diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index 873ca08fa7..24ba84c7bd 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -696,7 +696,7 @@ class ModelAdmin(BaseModelAdmin): def get_paginator(self, request, queryset, per_page, orphans=0, allow_empty_first_page=True): return self.paginator(queryset, per_page, orphans, allow_empty_first_page) - def log_addition(self, request, object): + def log_addition(self, request, object, message): """ Log that an object has been successfully added. @@ -708,7 +708,8 @@ class ModelAdmin(BaseModelAdmin): content_type_id=get_content_type_for_model(object).pk, object_id=object.pk, object_repr=force_text(object), - action_flag=ADDITION + action_flag=ADDITION, + change_message=message, ) def log_change(self, request, object, message): @@ -724,7 +725,7 @@ class ModelAdmin(BaseModelAdmin): object_id=object.pk, object_repr=force_text(object), action_flag=CHANGE, - change_message=message + change_message=message, ) def log_deletion(self, request, object, object_repr): @@ -740,7 +741,7 @@ class ModelAdmin(BaseModelAdmin): content_type_id=get_content_type_for_model(object).pk, object_id=object.pk, object_repr=object_repr, - action_flag=DELETION + action_flag=DELETION, ) def action_checkbox(self, obj): @@ -920,12 +921,14 @@ class ModelAdmin(BaseModelAdmin): return urlencode({'_changelist_filters': preserved_filters}) return '' - def construct_change_message(self, request, form, formsets): + def construct_change_message(self, request, form, formsets, add=False): """ Construct a change message from a changed object. """ change_message = [] - if form.changed_data: + if add: + change_message.append(_('Added.')) + elif form.changed_data: change_message.append(_('Changed %s.') % get_text_list(form.changed_data, _('and'))) if formsets: @@ -1373,11 +1376,11 @@ class ModelAdmin(BaseModelAdmin): if all_valid(formsets) and form_validated: self.save_model(request, new_object, form, not add) self.save_related(request, form, formsets, not add) + change_message = self.construct_change_message(request, form, formsets, add) if add: - self.log_addition(request, new_object) + self.log_addition(request, new_object, change_message) return self.response_add(request, new_object) else: - change_message = self.construct_change_message(request, form, formsets) self.log_change(request, new_object, change_message) return self.response_change(request, new_object) else: diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py index 429f9d7b6c..7c299a4774 100644 --- a/tests/admin_views/tests.py +++ b/tests/admin_views/tests.py @@ -8,7 +8,7 @@ import unittest from django.contrib.admin import ModelAdmin from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME -from django.contrib.admin.models import DELETION, LogEntry +from django.contrib.admin.models import ADDITION, DELETION, LogEntry from django.contrib.admin.options import TO_FIELD_VAR from django.contrib.admin.templatetags.admin_static import static from django.contrib.admin.templatetags.admin_urls import add_preserved_filters @@ -1542,6 +1542,17 @@ class AdminViewPermissionsTest(TestCase): self.assertEqual(mail.outbox[0].subject, 'Greetings from a created object') self.client.get(reverse('admin:logout')) + # Check that the addition was logged correctly + addition_log = LogEntry.objects.all()[0] + new_article = Article.objects.last() + article_ct = ContentType.objects.get_for_model(Article) + self.assertEqual(addition_log.user_id, self.u2.pk) + self.assertEqual(addition_log.content_type_id, article_ct.pk) + self.assertEqual(addition_log.object_id, str(new_article.pk)) + self.assertEqual(addition_log.object_repr, "Døm ikke") + self.assertEqual(addition_log.action_flag, ADDITION) + self.assertEqual(addition_log.change_message, "Added.") + # Super can add too, but is redirected to the change list view self.client.get(self.index_url) self.client.post(login_url, self.super_login)