diff options
| author | Luke Plant <L.Plant.98@cantab.net> | 2011-06-03 11:54:29 +0000 |
|---|---|---|
| committer | Luke Plant <L.Plant.98@cantab.net> | 2011-06-03 11:54:29 +0000 |
| commit | cb996cce059ec6f384d7ee9b67df6208c92eb719 (patch) | |
| tree | f1e70c9d2e48abe73c851707d43c6acfc3d68978 /tests/regressiontests/admin_views | |
| parent | 22598d0044d0e69f57011836e5dd5caa4d441e59 (diff) | |
Fixed various bugs related to having multiple columns in admin list_display with the same sort field
Thanks to julien for the report
Refs #11868
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16319 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests/regressiontests/admin_views')
| -rw-r--r-- | tests/regressiontests/admin_views/models.py | 15 | ||||
| -rw-r--r-- | tests/regressiontests/admin_views/tests.py | 39 |
2 files changed, 53 insertions, 1 deletions
diff --git a/tests/regressiontests/admin_views/models.py b/tests/regressiontests/admin_views/models.py index 98873966eb..52d96a93f6 100644 --- a/tests/regressiontests/admin_views/models.py +++ b/tests/regressiontests/admin_views/models.py @@ -811,6 +811,20 @@ class OtherStoryAdmin(admin.ModelAdmin): list_editable = ('content', ) ordering = ["-pk"] +class ComplexSortedPerson(models.Model): + name = models.CharField(max_length=100) + age = models.PositiveIntegerField() + is_employee = models.NullBooleanField() + +class ComplexSortedPersonAdmin(admin.ModelAdmin): + list_display = ('name', 'age', 'is_employee', 'colored_name') + ordering = ('name',) + + def colored_name(self, obj): + return '<span style="color: #%s;">%s</span>' % ('ff00ff', obj.name) + colored_name.allow_tags = True + colored_name.admin_order_field = 'name' + admin.site.register(Article, ArticleAdmin) admin.site.register(CustomArticle, CustomArticleAdmin) admin.site.register(Section, save_as=True, inlines=[ArticleInline]) @@ -872,3 +886,4 @@ admin.site.register(Album, AlbumAdmin) admin.site.register(Question) admin.site.register(Answer) admin.site.register(PrePopulatedPost, PrePopulatedPostAdmin) +admin.site.register(ComplexSortedPerson, ComplexSortedPersonAdmin) diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py index 4361dc992e..25056b5e04 100644 --- a/tests/regressiontests/admin_views/tests.py +++ b/tests/regressiontests/admin_views/tests.py @@ -37,7 +37,8 @@ from models import (Article, BarAccount, CustomArticle, EmptyModel, Language, Collector, Widget, Grommet, DooHickey, FancyDoodad, Whatsit, Category, Post, Plot, FunkyTag, Chapter, Book, Promo, WorkHour, Employee, Question, Answer, Inquisition, Actor, FoodDelivery, - RowLevelChangePermissionModel, Paper, CoverLetter, Story, OtherStory) + RowLevelChangePermissionModel, Paper, CoverLetter, Story, OtherStory, + ComplexSortedPerson) class AdminViewBasicTest(TestCase): @@ -313,6 +314,42 @@ class AdminViewBasicTest(TestCase): response.content.index(link % p1.pk) < response.content.index(link % p2.pk) ) + def testMultipleSortSameField(self): + # Check that we get the columns we expect if we have two columns + # that correspond to the same ordering field + dt = datetime.datetime.now() + p1 = Podcast.objects.create(name="A", release_date=dt) + p2 = Podcast.objects.create(name="B", release_date=dt - datetime.timedelta(10)) + + link = '<a href="%s/' + response = self.client.get('/test_admin/admin/admin_views/podcast/', {}) + self.assertEqual(response.status_code, 200) + self.assertTrue( + response.content.index(link % p1.pk) < response.content.index(link % p2.pk) + ) + + p1 = ComplexSortedPerson.objects.create(name="Bob", age=10) + p2 = ComplexSortedPerson.objects.create(name="Amy", age=20) + link = '<a href="%s/' + + response = self.client.get('/test_admin/admin/admin_views/complexsortedperson/', {}) + self.assertEqual(response.status_code, 200) + # Should have 5 columns (including action checkbox col) + self.assertContains(response, '<th scope="col"', count=5) + + self.assertContains(response, 'Name') + self.assertContains(response, 'Colored name') + + # Check order + self.assertTrue( + response.content.index('Name') < response.content.index('Colored name') + ) + + # Check sorting - should be by name + self.assertTrue( + response.content.index(link % p2.id) < response.content.index(link % p1.id) + ) + def testLimitedFilter(self): """Ensure admin changelist filters do not contain objects excluded via limit_choices_to. This also tests relation-spanning filters (e.g. 'color__value'). |
