summaryrefslogtreecommitdiff
path: root/tests/regressiontests/admin_views
diff options
context:
space:
mode:
authorLuke Plant <L.Plant.98@cantab.net>2011-06-03 11:54:29 +0000
committerLuke Plant <L.Plant.98@cantab.net>2011-06-03 11:54:29 +0000
commitcb996cce059ec6f384d7ee9b67df6208c92eb719 (patch)
treef1e70c9d2e48abe73c851707d43c6acfc3d68978 /tests/regressiontests/admin_views
parent22598d0044d0e69f57011836e5dd5caa4d441e59 (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.py15
-rw-r--r--tests/regressiontests/admin_views/tests.py39
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').