diff options
author | Dan Moore <dan@moore.cx> | 2018-11-03 22:45:36 -0400 |
---|---|---|
committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2019-10-23 10:50:31 +0200 |
commit | bc94e3c1a263da4b3eae3111c12270744907901b (patch) | |
tree | 288d97879beb827df39d29e5fdc80d8aa5e089d9 /tests/admin_filters | |
parent | f3855a8d2d9eee7f82e412a69bf42ad2df867462 (diff) | |
download | django-bc94e3c1a263da4b3eae3111c12270744907901b.tar.gz |
Fixed #29919 -- Fixed RelatedOnlyFieldListFilter crash with reverse relationships.
Diffstat (limited to 'tests/admin_filters')
-rw-r--r-- | tests/admin_filters/tests.py | 37 |
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): |