mirror of
https://github.com/django/django.git
synced 2025-10-26 23:26:08 +00:00
Fixed #19361 -- Added link to object's change form in admin's post-save message.
Thanks Roel Kramer for tests.
This commit is contained in:
committed by
Tim Graham
parent
1e7da99ea6
commit
80bcbecd4a
@@ -1,3 +1,5 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import copy
|
||||
import operator
|
||||
from collections import OrderedDict
|
||||
@@ -38,8 +40,8 @@ from django.template.response import SimpleTemplateResponse, TemplateResponse
|
||||
from django.utils import six
|
||||
from django.utils.decorators import method_decorator
|
||||
from django.utils.encoding import force_text, python_2_unicode_compatible
|
||||
from django.utils.html import escape, escapejs
|
||||
from django.utils.http import urlencode
|
||||
from django.utils.html import escape, escapejs, format_html
|
||||
from django.utils.http import urlencode, urlquote
|
||||
from django.utils.safestring import mark_safe
|
||||
from django.utils.text import capfirst, get_text_list
|
||||
from django.utils.translation import string_concat, ugettext as _, ungettext
|
||||
@@ -1058,7 +1060,20 @@ class ModelAdmin(BaseModelAdmin):
|
||||
opts = obj._meta
|
||||
pk_value = obj._get_pk_val()
|
||||
preserved_filters = self.get_preserved_filters(request)
|
||||
msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)}
|
||||
obj_url = reverse(
|
||||
'admin:%s_%s_change' % (opts.app_label, opts.model_name),
|
||||
args=(quote(pk_value),),
|
||||
current_app=self.admin_site.name,
|
||||
)
|
||||
# Add a link to the object's change form if the user can edit the obj.
|
||||
if self.has_change_permission(request, obj):
|
||||
obj_repr = format_html('<a href="{}">{}</a>', urlquote(obj_url), obj)
|
||||
else:
|
||||
obj_repr = force_text(obj)
|
||||
msg_dict = {
|
||||
'name': force_text(opts.verbose_name),
|
||||
'obj': obj_repr,
|
||||
}
|
||||
# Here, we distinguish between different save types by checking for
|
||||
# the presence of keys in request.POST.
|
||||
|
||||
@@ -1075,13 +1090,13 @@ class ModelAdmin(BaseModelAdmin):
|
||||
})
|
||||
|
||||
elif "_continue" in request.POST:
|
||||
msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict
|
||||
msg = format_html(
|
||||
_('The {name} "{obj}" was added successfully. You may edit it again below.'),
|
||||
**msg_dict
|
||||
)
|
||||
self.message_user(request, msg, messages.SUCCESS)
|
||||
if post_url_continue is None:
|
||||
post_url_continue = reverse('admin:%s_%s_change' %
|
||||
(opts.app_label, opts.model_name),
|
||||
args=(quote(pk_value),),
|
||||
current_app=self.admin_site.name)
|
||||
post_url_continue = obj_url
|
||||
post_url_continue = add_preserved_filters(
|
||||
{'preserved_filters': preserved_filters, 'opts': opts},
|
||||
post_url_continue
|
||||
@@ -1089,14 +1104,20 @@ class ModelAdmin(BaseModelAdmin):
|
||||
return HttpResponseRedirect(post_url_continue)
|
||||
|
||||
elif "_addanother" in request.POST:
|
||||
msg = _('The %(name)s "%(obj)s" was added successfully. You may add another %(name)s below.') % msg_dict
|
||||
msg = format_html(
|
||||
_('The {name} "{obj}" was added successfully. You may add another {name} below.'),
|
||||
**msg_dict
|
||||
)
|
||||
self.message_user(request, msg, messages.SUCCESS)
|
||||
redirect_url = request.path
|
||||
redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
else:
|
||||
msg = _('The %(name)s "%(obj)s" was added successfully.') % msg_dict
|
||||
msg = format_html(
|
||||
_('The {name} "{obj}" was added successfully.'),
|
||||
**msg_dict
|
||||
)
|
||||
self.message_user(request, msg, messages.SUCCESS)
|
||||
return self.response_post_save_add(request, obj)
|
||||
|
||||
@@ -1122,16 +1143,25 @@ class ModelAdmin(BaseModelAdmin):
|
||||
pk_value = obj._get_pk_val()
|
||||
preserved_filters = self.get_preserved_filters(request)
|
||||
|
||||
msg_dict = {'name': force_text(opts.verbose_name), 'obj': force_text(obj)}
|
||||
msg_dict = {
|
||||
'name': force_text(opts.verbose_name),
|
||||
'obj': format_html('<a href="{}">{}</a>', urlquote(request.path), obj),
|
||||
}
|
||||
if "_continue" in request.POST:
|
||||
msg = _('The %(name)s "%(obj)s" was changed successfully. You may edit it again below.') % msg_dict
|
||||
msg = format_html(
|
||||
_('The {name} "{obj}" was changed successfully. You may edit it again below.'),
|
||||
**msg_dict
|
||||
)
|
||||
self.message_user(request, msg, messages.SUCCESS)
|
||||
redirect_url = request.path
|
||||
redirect_url = add_preserved_filters({'preserved_filters': preserved_filters, 'opts': opts}, redirect_url)
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
elif "_saveasnew" in request.POST:
|
||||
msg = _('The %(name)s "%(obj)s" was added successfully. You may edit it again below.') % msg_dict
|
||||
msg = format_html(
|
||||
_('The {name} "{obj}" was added successfully. You may edit it again below.'),
|
||||
**msg_dict
|
||||
)
|
||||
self.message_user(request, msg, messages.SUCCESS)
|
||||
redirect_url = reverse('admin:%s_%s_change' %
|
||||
(opts.app_label, opts.model_name),
|
||||
@@ -1141,7 +1171,10 @@ class ModelAdmin(BaseModelAdmin):
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
elif "_addanother" in request.POST:
|
||||
msg = _('The %(name)s "%(obj)s" was changed successfully. You may add another %(name)s below.') % msg_dict
|
||||
msg = format_html(
|
||||
_('The {name} "{obj}" was changed successfully. You may add another {name} below.'),
|
||||
**msg_dict
|
||||
)
|
||||
self.message_user(request, msg, messages.SUCCESS)
|
||||
redirect_url = reverse('admin:%s_%s_add' %
|
||||
(opts.app_label, opts.model_name),
|
||||
@@ -1150,7 +1183,10 @@ class ModelAdmin(BaseModelAdmin):
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
else:
|
||||
msg = _('The %(name)s "%(obj)s" was changed successfully.') % msg_dict
|
||||
msg = format_html(
|
||||
_('The {name} "{obj}" was changed successfully.'),
|
||||
**msg_dict
|
||||
)
|
||||
self.message_user(request, msg, messages.SUCCESS)
|
||||
return self.response_post_save_change(request, obj)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user