diff options
| author | Jannis Leidel <jannis@leidel.info> | 2011-03-03 13:47:39 +0000 |
|---|---|---|
| committer | Jannis Leidel <jannis@leidel.info> | 2011-03-03 13:47:39 +0000 |
| commit | 0516b9987576a475e9767517f13d8f423f6aab4c (patch) | |
| tree | d86c7775e98d35028a0540152a9738b064753978 /tests | |
| parent | 1985ca77eabf78d0c7a624825cde8fb4fa7752d1 (diff) | |
[1.2.X] Fixed #12475 -- Fixed an edge case with hidden fields in ModelAdmin changelists when used in conjunction with list_display_links or list_editable. Thanks, Simon Meers, Julien Phalip, Karen and master.
Backport from trunk (r15722).
git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@15724 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/admin_views/models.py | 24 | ||||
| -rw-r--r-- | tests/regressiontests/admin_views/tests.py | 33 |
2 files changed, 56 insertions, 1 deletions
diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py index 374d3b7b0f..f6b5ce9f5a 100644 --- a/tests/regressiontests/admin_views/models.py +++ b/tests/regressiontests/admin_views/models.py @@ -698,6 +698,28 @@ class CoverLetterAdmin(admin.ModelAdmin): #return super(CoverLetterAdmin, self).queryset(request).only('author') return super(CoverLetterAdmin, self).queryset(request).defer('date') +class Story(models.Model): + title = models.CharField(max_length=100) + content = models.TextField() + +class StoryForm(forms.ModelForm): + class Meta: + widgets = {'title': forms.HiddenInput} + +class StoryAdmin(admin.ModelAdmin): + list_display = ('id', 'title', 'content') + list_display_links = ('title',) # 'id' not in list_display_links + list_editable = ('content', ) + form = StoryForm + +class OtherStory(models.Model): + title = models.CharField(max_length=100) + content = models.TextField() + +class OtherStoryAdmin(admin.ModelAdmin): + list_display = ('id', 'title', 'content') + list_display_links = ('title', 'id') # 'id' in list_display_links + list_editable = ('content', ) admin.site.register(Article, ArticleAdmin) admin.site.register(CustomArticle, CustomArticleAdmin) @@ -739,6 +761,8 @@ admin.site.register(FoodDelivery, FoodDeliveryAdmin) admin.site.register(RowLevelChangePermissionModel, RowLevelChangePermissionModelAdmin) admin.site.register(Paper, PaperAdmin) admin.site.register(CoverLetter, CoverLetterAdmin) +admin.site.register(Story, StoryAdmin) +admin.site.register(OtherStory, OtherStoryAdmin) # We intentionally register Promo and ChapterXtra1 but not Chapter nor ChapterXtra2. # That way we cover all four cases: diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index 73c9060062..149e828133 100644 --- a/tests/regressiontests/admin_views/tests.py +++ b/tests/regressiontests/admin_views/tests.py @@ -31,7 +31,8 @@ from models import (Article, BarAccount, CustomArticle, EmptyModel, Person, Persona, Picture, Podcast, Section, Subscriber, Vodcast, Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit, Category, Post, Plot, FunkyTag, WorkHour, Employee, Inquisition, - Actor, FoodDelivery, RowLevelChangePermissionModel, Paper, CoverLetter) + Actor, FoodDelivery, RowLevelChangePermissionModel, Paper, CoverLetter, + Story, OtherStory) class AdminViewBasicTest(TestCase): @@ -1540,6 +1541,36 @@ class AdminViewListEditable(TestCase): + def test_pk_hidden_fields(self): + """ Ensure that hidden pk fields aren't displayed in the table body and + that their corresponding human-readable value is displayed instead. + Note that the hidden pk fields are in fact be displayed but + separately (not in the table), and only once. + Refs #12475. + """ + Story.objects.create(title='The adventures of Guido', content='Once upon a time in Djangoland...') + Story.objects.create(title='Crouching Tiger, Hidden Python', content='The Python was sneaking into...') + response = self.client.get('/test_admin/admin/admin_views/story/') + self.assertContains(response, 'id="id_form-0-id"', 1) # Only one hidden field, in a separate place than the table. + self.assertContains(response, 'id="id_form-1-id"', 1) + self.assertContains(response, '<div class="hiddenfields">\n<input type="hidden" name="form-0-id" value="2" id="id_form-0-id" /><input type="hidden" name="form-1-id" value="1" id="id_form-1-id" />\n</div>') + self.assertContains(response, '<td>1</td>', 1) + self.assertContains(response, '<td>2</td>', 1) + + def test_pk_hidden_fields_with_list_display_links(self): + """ Similarly as test_pk_hidden_fields, but when the hidden pk fields are + referenced in list_display_links. + Refs #12475. + """ + OtherStory.objects.create(title='The adventures of Guido', content='Once upon a time in Djangoland...') + OtherStory.objects.create(title='Crouching Tiger, Hidden Python', content='The Python was sneaking into...') + response = self.client.get('/test_admin/admin/admin_views/otherstory/') + self.assertContains(response, 'id="id_form-0-id"', 1) # Only one hidden field, in a separate place than the table. + self.assertContains(response, 'id="id_form-1-id"', 1) + self.assertContains(response, '<div class="hiddenfields">\n<input type="hidden" name="form-0-id" value="2" id="id_form-0-id" /><input type="hidden" name="form-1-id" value="1" id="id_form-1-id" />\n</div>') + self.assertContains(response, '<th><a href="1/">1</a></th>', 1) + self.assertContains(response, '<th><a href="2/">2</a></th>', 1) + class AdminSearchTest(TestCase): fixtures = ['admin-views-users','multiple-child-classes'] |
