summaryrefslogtreecommitdiff
path: root/tests/admin_filters
diff options
context:
space:
mode:
authorDan Moore <dan@moore.cx>2018-11-03 22:45:36 -0400
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2019-10-23 10:50:31 +0200
commitbc94e3c1a263da4b3eae3111c12270744907901b (patch)
tree288d97879beb827df39d29e5fdc80d8aa5e089d9 /tests/admin_filters
parentf3855a8d2d9eee7f82e412a69bf42ad2df867462 (diff)
downloaddjango-bc94e3c1a263da4b3eae3111c12270744907901b.tar.gz
Fixed #29919 -- Fixed RelatedOnlyFieldListFilter crash with reverse relationships.
Diffstat (limited to 'tests/admin_filters')
-rw-r--r--tests/admin_filters/tests.py37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/admin_filters/tests.py b/tests/admin_filters/tests.py
index 4e6f1f4732..ce659f937f 100644
--- a/tests/admin_filters/tests.py
+++ b/tests/admin_filters/tests.py
@@ -741,6 +741,43 @@ class ListFiltersTests(TestCase):
expected = [(self.alfred.pk, 'alfred'), (self.bob.pk, 'bob')]
self.assertEqual(sorted(filterspec.lookup_choices), sorted(expected))
+ def test_relatedonlyfieldlistfilter_foreignkey_reverse_relationships(self):
+ class EmployeeAdminReverseRelationship(ModelAdmin):
+ list_filter = (
+ ('book', RelatedOnlyFieldListFilter),
+ )
+
+ self.djangonaut_book.employee = self.john
+ self.djangonaut_book.save()
+ self.django_book.employee = self.jack
+ self.django_book.save()
+
+ modeladmin = EmployeeAdminReverseRelationship(Employee, site)
+ request = self.request_factory.get('/')
+ request.user = self.alfred
+ changelist = modeladmin.get_changelist_instance(request)
+ filterspec = changelist.get_filters(request)[0][0]
+ self.assertEqual(filterspec.lookup_choices, [
+ (self.djangonaut_book.pk, 'Djangonaut: an art of living'),
+ (self.django_book.pk, 'The Django Book'),
+ ])
+
+ def test_relatedonlyfieldlistfilter_manytomany_reverse_relationships(self):
+ class UserAdminReverseRelationship(ModelAdmin):
+ list_filter = (
+ ('books_contributed', RelatedOnlyFieldListFilter),
+ )
+
+ modeladmin = UserAdminReverseRelationship(User, site)
+ request = self.request_factory.get('/')
+ request.user = self.alfred
+ changelist = modeladmin.get_changelist_instance(request)
+ filterspec = changelist.get_filters(request)[0][0]
+ self.assertEqual(
+ filterspec.lookup_choices,
+ [(self.guitar_book.pk, 'Guitar for dummies')],
+ )
+
def test_relatedonlyfieldlistfilter_foreignkey_ordering(self):
"""RelatedOnlyFieldListFilter ordering respects ModelAdmin.ordering."""
class EmployeeAdminWithOrdering(ModelAdmin):