Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #18433 -- Fixed "View on Site" link in inline admin for models …

…with custom PK
  • Loading branch information...
commit 0ae727beda8b34deb5061d87fbbeb40e5ac80db3 1 parent 6a66fc0
@dhepper dhepper authored
View
2  django/contrib/admin/templates/admin/edit_inline/stacked.html
@@ -6,7 +6,7 @@
{% for inline_admin_form in inline_admin_formset %}<div class="inline-related{% if forloop.last %} empty-form last-related{% endif %}" id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}">
<h3><b>{{ inline_admin_formset.opts.verbose_name|title }}:</b>&nbsp;<span class="inline_label">{% if inline_admin_form.original %}{{ inline_admin_form.original }}{% else %}#{{ forloop.counter }}{% endif %}</span>
- {% if inline_admin_form.show_url %}<a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id }}/">{% trans "View on site" %}</a>{% endif %}
+ {% if inline_admin_form.show_url %}<a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.pk }}/">{% trans "View on site" %}</a>{% endif %}
{% if inline_admin_formset.formset.can_delete and inline_admin_form.original %}<span class="delete">{{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}</span>{% endif %}
</h3>
{% if inline_admin_form.form.non_field_errors %}{{ inline_admin_form.form.non_field_errors }}{% endif %}
View
2  django/contrib/admin/templates/admin/edit_inline/tabular.html
@@ -27,7 +27,7 @@
<td class="original">
{% if inline_admin_form.original or inline_admin_form.show_url %}<p>
{% if inline_admin_form.original %} {{ inline_admin_form.original }}{% endif %}
- {% if inline_admin_form.show_url %}<a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id }}/">{% trans "View on site" %}</a>{% endif %}
+ {% if inline_admin_form.show_url %}<a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.pk }}/">{% trans "View on site" %}</a>{% endif %}
</p>{% endif %}
{% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %}
{{ inline_admin_form.fk_field.field }}
View
13 tests/regressiontests/admin_inlines/admin.py
@@ -115,6 +115,16 @@ class ProfileInline(admin.TabularInline):
model = Profile
extra = 1
+
+# admin for #18433
+class ChildModel1Inline(admin.TabularInline):
+ model = ChildModel1
+
+
+class ChildModel2Inline(admin.StackedInline):
+ model = ChildModel2
+
+
site.register(TitleCollection, inlines=[TitleInline])
# Test bug #12561 and #12778
# only ModelAdmin media
@@ -130,4 +140,5 @@ class ProfileInline(admin.TabularInline):
site.register(Holder4, Holder4Admin)
site.register(Author, AuthorAdmin)
site.register(CapoFamiglia, inlines=[ConsigliereInline, SottoCapoInline])
-site.register(ProfileCollection, inlines=[ProfileInline])
+site.register(ProfileCollection, inlines=[ProfileInline])
+site.register(ParentModelWithCustomPk, inlines=[ChildModel1Inline, ChildModel2Inline])
View
25 tests/regressiontests/admin_inlines/models.py
@@ -139,6 +139,31 @@ class SottoCapo(models.Model):
name = models.CharField(max_length=100)
capo_famiglia = models.ForeignKey(CapoFamiglia, related_name='+')
+# Models for #18433
+
+class ParentModelWithCustomPk(models.Model):
+ my_own_pk = models.CharField(max_length=100, primary_key=True)
+ name = models.CharField(max_length=100)
+
+
+class ChildModel1(models.Model):
+ my_own_pk = models.CharField(max_length=100, primary_key=True)
+ name = models.CharField(max_length=100)
+ parent = models.ForeignKey(ParentModelWithCustomPk)
+
+ def get_absolute_url(self):
+ return '/child_model1/'
+
+
+class ChildModel2(models.Model):
+ my_own_pk = models.CharField(max_length=100, primary_key=True)
+ name = models.CharField(max_length=100)
+ parent = models.ForeignKey(ParentModelWithCustomPk)
+
+ def get_absolute_url(self):
+ return '/child_model2/'
+
+
# Other models
class ProfileCollection(models.Model):
View
17 tests/regressiontests/admin_inlines/tests.py
@@ -11,7 +11,7 @@
from .admin import InnerInline
from .models import (Holder, Inner, Holder2, Inner2, Holder3, Inner3, Person,
OutfitItem, Fashionista, Teacher, Parent, Child, Author, Book, Profile,
- ProfileCollection)
+ ProfileCollection, ParentModelWithCustomPk, ChildModel1, ChildModel2)
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
@@ -147,6 +147,21 @@ def test_non_related_name_inline(self):
'<input id="id_-2-0-name" type="text" class="vTextField" '
'name="-2-0-name" maxlength="100" />', html=True)
+ def test_custom_pk_shortcut(self):
+ """
+ Ensure that the "View on Site" link is correct for models with a
+ custom primary key field. Bug #18433.
+ """
+ parent = ParentModelWithCustomPk.objects.create(my_own_pk="foo", name="Foo")
+ child1 = ChildModel1.objects.create(my_own_pk="bar", name="Bar", parent=parent)
+ child2 = ChildModel2.objects.create(my_own_pk="baz", name="Baz", parent=parent)
+ response = self.client.get('/admin/admin_inlines/parentmodelwithcustompk/foo/')
+ child1_shortcut = 'r/%s/%s/'%(ContentType.objects.get_for_model(child1).pk, child1.pk)
+ child2_shortcut = 'r/%s/%s/'%(ContentType.objects.get_for_model(child2).pk, child2.pk)
+ self.assertContains(response, child1_shortcut)
+ self.assertContains(response, child2_shortcut)
+
+
@override_settings(PASSWORD_HASHERS=('django.contrib.auth.hashers.SHA1PasswordHasher',))
class TestInlineMedia(TestCase):
urls = "regressiontests.admin_inlines.urls"
Please sign in to comment.
Something went wrong with that request. Please try again.