summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorHasan Ramezani <hasan.r67@gmail.com>2018-10-19 15:41:29 +0200
committerTim Graham <timograham@gmail.com>2018-11-14 14:29:39 -0500
commit6d4e5feb79f7eabe8a0c7c4b87f25b1a7f87ca0b (patch)
tree23294d3f78038e93ad1494ce9957b6e7f29ca2ce /tests
parent35a08b8541c856a51b2ab718e0a2fe060debfa2a (diff)
Fixed #29835 -- Made RelatedFieldListFilter respect ModelAdmin.ordering.
Diffstat (limited to 'tests')
-rw-r--r--tests/admin_filters/tests.py37
-rw-r--r--tests/model_fields/tests.py36
2 files changed, 72 insertions, 1 deletions
diff --git a/tests/admin_filters/tests.py b/tests/admin_filters/tests.py
index 2e16909dc3..f901d32532 100644
--- a/tests/admin_filters/tests.py
+++ b/tests/admin_filters/tests.py
@@ -548,6 +548,43 @@ class ListFiltersTests(TestCase):
self.assertIs(choice['selected'], True)
self.assertEqual(choice['query_string'], '?author__id__exact=%d' % self.alfred.pk)
+ def test_relatedfieldlistfilter_foreignkey_ordering(self):
+ """RelatedFieldListFilter ordering respects ModelAdmin.ordering."""
+ class EmployeeAdminWithOrdering(ModelAdmin):
+ ordering = ('name',)
+
+ class BookAdmin(ModelAdmin):
+ list_filter = ('employee',)
+
+ site.register(Employee, EmployeeAdminWithOrdering)
+ self.addCleanup(lambda: site.unregister(Employee))
+ modeladmin = BookAdmin(Book, site)
+
+ request = self.request_factory.get('/')
+ request.user = self.alfred
+ changelist = modeladmin.get_changelist_instance(request)
+ filterspec = changelist.get_filters(request)[0][0]
+ expected = [(self.jack.pk, 'Jack Red'), (self.john.pk, 'John Blue')]
+ self.assertEqual(filterspec.lookup_choices, expected)
+
+ def test_relatedfieldlistfilter_foreignkey_ordering_reverse(self):
+ class EmployeeAdminWithOrdering(ModelAdmin):
+ ordering = ('-name',)
+
+ class BookAdmin(ModelAdmin):
+ list_filter = ('employee',)
+
+ site.register(Employee, EmployeeAdminWithOrdering)
+ self.addCleanup(lambda: site.unregister(Employee))
+ modeladmin = BookAdmin(Book, site)
+
+ request = self.request_factory.get('/')
+ request.user = self.alfred
+ changelist = modeladmin.get_changelist_instance(request)
+ filterspec = changelist.get_filters(request)[0][0]
+ expected = [(self.john.pk, 'John Blue'), (self.jack.pk, 'Jack Red')]
+ self.assertEqual(filterspec.lookup_choices, expected)
+
def test_relatedfieldlistfilter_manytomany(self):
modeladmin = BookAdmin(Book, site)
diff --git a/tests/model_fields/tests.py b/tests/model_fields/tests.py
index 45f61a0034..d638acb488 100644
--- a/tests/model_fields/tests.py
+++ b/tests/model_fields/tests.py
@@ -6,7 +6,7 @@ from django.test import SimpleTestCase, TestCase
from django.utils.functional import lazy
from .models import (
- Foo, RenamedField, VerboseNameField, Whiz, WhizIter, WhizIterEmpty,
+ Bar, Foo, RenamedField, VerboseNameField, Whiz, WhizIter, WhizIterEmpty,
)
@@ -157,3 +157,37 @@ class GetChoicesTests(SimpleTestCase):
lazy_func = lazy(lambda x: 0 / 0, int) # raises ZeroDivisionError if evaluated.
f = models.CharField(choices=[(lazy_func('group'), (('a', 'A'), ('b', 'B')))])
self.assertEqual(f.get_choices(include_blank=True)[0], ('', '---------'))
+
+
+class GetChoicesOrderingTests(TestCase):
+
+ @classmethod
+ def setUpTestData(cls):
+ cls.foo1 = Foo.objects.create(a='a', d='12.34')
+ cls.foo2 = Foo.objects.create(a='b', d='12.34')
+ cls.bar1 = Bar.objects.create(a=cls.foo1, b='a')
+ cls.bar2 = Bar.objects.create(a=cls.foo2, b='a')
+ cls.field = Bar._meta.get_field('a')
+
+ def assertChoicesEqual(self, choices, objs):
+ self.assertEqual(choices, [(obj.pk, str(obj)) for obj in objs])
+
+ def test_get_choices(self):
+ self.assertChoicesEqual(
+ self.field.get_choices(include_blank=False, ordering=('a',)),
+ [self.foo1, self.foo2]
+ )
+ self.assertChoicesEqual(
+ self.field.get_choices(include_blank=False, ordering=('-a',)),
+ [self.foo2, self.foo1]
+ )
+
+ def test_get_choices_reverse_related_field(self):
+ self.assertChoicesEqual(
+ self.field.remote_field.get_choices(include_blank=False, ordering=('a',)),
+ [self.bar1, self.bar2]
+ )
+ self.assertChoicesEqual(
+ self.field.remote_field.get_choices(include_blank=False, ordering=('-a',)),
+ [self.bar2, self.bar1]
+ )