mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #18433 -- Fixed "View on Site" link in inline admin for models with custom PK
This commit is contained in:
@@ -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 @@ site.register(Fashionista, inlines=[InlineWeakness])
|
||||
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])
|
||||
@@ -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):
|
||||
|
||||
@@ -11,7 +11,7 @@ from django.test.utils import override_settings
|
||||
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 @@ class TestInline(TestCase):
|
||||
'<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"
|
||||
|
||||
Reference in New Issue
Block a user