Index: django/contrib/admin/helpers.py =================================================================== --- django/contrib/admin/helpers.py (revision 12761) +++ django/contrib/admin/helpers.py (working copy) @@ -1,6 +1,6 @@ from django import forms from django.conf import settings -from django.contrib.admin.util import flatten_fieldsets, lookup_field +from django.contrib.admin.util import flatten_fieldsets, lookup_field, quote from django.contrib.admin.util import display_for_field, label_for_field from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist @@ -11,8 +11,8 @@ from django.utils.html import escape, conditional_escape from django.utils.safestring import mark_safe from django.utils.translation import ugettext_lazy as _ +from django.core.urlresolvers import reverse, NoReverseMatch - ACTION_CHECKBOX_NAME = '_selected_action' class ActionForm(forms.Form): @@ -231,6 +231,18 @@ if original is not None: self.original_content_type_id = ContentType.objects.get_for_model(original).pk self.show_url = original and hasattr(original, 'get_absolute_url') + if original is not None and model_admin is not None: + if original.__class__ in model_admin.admin_site._registry: + try: + view_name = '%s:%s_%s_change' % ( + self.model_admin.admin_site.name, + original._meta.app_label, + original._meta.object_name.lower()) + self.admin_url = reverse( + view_name, None, (quote(original._get_pk_val()),)) + except NoReverseMatch: + # should not happen, but fail silently just in case + self.admin_url = None super(InlineAdminForm, self).__init__(form, fieldsets, prepopulated_fields, readonly_fields) Index: django/contrib/admin/templates/admin/edit_inline/stacked.html =================================================================== --- django/contrib/admin/templates/admin/edit_inline/stacked.html (revision 12761) +++ django/contrib/admin/templates/admin/edit_inline/stacked.html (working copy) @@ -6,7 +6,8 @@ {% for inline_admin_form in inline_admin_formset %}