summaryrefslogtreecommitdiff
path: root/tests/admin_views
diff options
context:
space:
mode:
authorAlexander Gaevsky <sasha@sasha0.ru>2016-02-09 02:35:03 +0200
committerTim Graham <timograham@gmail.com>2018-02-07 17:46:28 -0500
commitef2512b2ffdb719e5c0fb82142f9ce8478282823 (patch)
treeba07310c6630e4b4f1d19239668c7de05d653e86 /tests/admin_views
parent7d96f0c49ab750799860e42716d7105e11de44de (diff)
Fixed #25790 -- Allowed disable column sorting in the admin changelist.
Thanks Ramiro Morales for completing the patch.
Diffstat (limited to 'tests/admin_views')
-rw-r--r--tests/admin_views/admin.py40
-rw-r--r--tests/admin_views/tests.py30
-rw-r--r--tests/admin_views/urls.py1
3 files changed, 71 insertions, 0 deletions
diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py
index 3cfefb74e4..04e40c2e0d 100644
--- a/tests/admin_views/admin.py
+++ b/tests/admin_views/admin.py
@@ -1069,3 +1069,43 @@ site2.register(Person, save_as_continue=False)
site7 = admin.AdminSite(name="admin7")
site7.register(Article, ArticleAdmin2)
site7.register(Section)
+
+
+# Used to test ModelAdmin.sortable_by and get_sortable_by().
+class ArticleAdmin6(admin.ModelAdmin):
+ list_display = (
+ 'content', 'date', callable_year, 'model_year', 'modeladmin_year',
+ 'model_year_reversed', 'section',
+ )
+ sortable_by = ('date', callable_year)
+
+ def modeladmin_year(self, obj):
+ return obj.date.year
+ modeladmin_year.admin_order_field = 'date'
+
+
+class ActorAdmin6(admin.ModelAdmin):
+ list_display = ('name', 'age')
+ sortable_by = ('name',)
+
+ def get_sortable_by(self, request):
+ return ('age',)
+
+
+class ChapterAdmin6(admin.ModelAdmin):
+ list_display = ('title', 'book')
+ sortable_by = ()
+
+
+class ColorAdmin6(admin.ModelAdmin):
+ list_display = ('value',)
+
+ def get_sortable_by(self, request):
+ return ()
+
+
+site6 = admin.AdminSite(name='admin6')
+site6.register(Article, ArticleAdmin6)
+site6.register(Actor, ActorAdmin6)
+site6.register(Chapter, ChapterAdmin6)
+site6.register(Color, ColorAdmin6)
diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
index 3089307ba2..54a0590d21 100644
--- a/tests/admin_views/tests.py
+++ b/tests/admin_views/tests.py
@@ -131,6 +131,7 @@ class AdminViewBasicTestCase(TestCase):
cls.chap4 = Chapter.objects.create(title='Chapter 2', content='[ insert contents here ]', book=cls.b2)
cls.cx1 = ChapterXtra1.objects.create(chap=cls.chap1, xtra='ChapterXtra1 1')
cls.cx2 = ChapterXtra1.objects.create(chap=cls.chap3, xtra='ChapterXtra1 2')
+ Actor.objects.create(name='Palin', age=27)
# Post data for edit inline
cls.inline_post_data = {
@@ -930,6 +931,35 @@ class AdminViewBasicTest(AdminViewBasicTestCase):
self.assertContains(response, 'question__expires__month=10')
self.assertContains(response, 'question__expires__year=2016')
+ def test_sortable_by_columns_subset(self):
+ expected_sortable_fields = ('date', 'callable_year')
+ expected_not_sortable_fields = (
+ 'content', 'model_year', 'modeladmin_year', 'model_year_reversed',
+ 'section',
+ )
+ response = self.client.get(reverse('admin6:admin_views_article_changelist'))
+ for field_name in expected_sortable_fields:
+ self.assertContains(response, '<th scope="col" class="sortable column-%s">' % field_name)
+ for field_name in expected_not_sortable_fields:
+ self.assertContains(response, '<th scope="col" class="column-%s">' % field_name)
+
+ def test_get_sortable_by_columns_subset(self):
+ response = self.client.get(reverse('admin6:admin_views_actor_changelist'))
+ self.assertContains(response, '<th scope="col" class="sortable column-age">')
+ self.assertContains(response, '<th scope="col" class="column-name">')
+
+ def test_sortable_by_no_column(self):
+ expected_not_sortable_fields = ('title', 'book')
+ response = self.client.get(reverse('admin6:admin_views_chapter_changelist'))
+ for field_name in expected_not_sortable_fields:
+ self.assertContains(response, '<th scope="col" class="column-%s">' % field_name)
+ self.assertNotContains(response, '<th scope="col" class="sortable column')
+
+ def test_get_sortable_by_no_column(self):
+ response = self.client.get(reverse('admin6:admin_views_color_changelist'))
+ self.assertContains(response, '<th scope="col" class="column-value">')
+ self.assertNotContains(response, '<th scope="col" class="sortable column')
+
@override_settings(TEMPLATES=[{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
diff --git a/tests/admin_views/urls.py b/tests/admin_views/urls.py
index 9f8bdf5cba..c2d989b245 100644
--- a/tests/admin_views/urls.py
+++ b/tests/admin_views/urls.py
@@ -12,6 +12,7 @@ urlpatterns = [
url(r'^test_admin/admin3/', (admin.site.get_urls(), 'admin', 'admin3'), {'form_url': 'pony'}),
url(r'^test_admin/admin4/', customadmin.simple_site.urls),
url(r'^test_admin/admin5/', admin.site2.urls),
+ url(r'^test_admin/admin6/', admin.site6.urls),
url(r'^test_admin/admin7/', admin.site7.urls),
# All admin views accept `extra_context` to allow adding it like this:
url(r'^test_admin/admin8/', (admin.site.get_urls(), 'admin', 'admin-extra-context'), {'extra_context': {}}),