diff --git a/django_filters/views.py b/django_filters/views.py index a4ba68a7e..7c2fbe5bc 100644 --- a/django_filters/views.py +++ b/django_filters/views.py @@ -79,6 +79,8 @@ def get(self, request, *args, **kwargs): if self.filterset.is_valid() or not self.get_strict(): self.object_list = self.filterset.qs + elif not self.filterset.is_bound: + self.object_list = self.get_queryset() else: self.object_list = self.filterset.queryset.none() diff --git a/tests/templates/tests/book_filter.html b/tests/templates/tests/book_filter.html index 474ffebd8..b593ecd51 100644 --- a/tests/templates/tests/book_filter.html +++ b/tests/templates/tests/book_filter.html @@ -1,5 +1,5 @@ {{ filter.form }} -{% for obj in filter.qs %} +{% for obj in object_list %} {{ obj }} {% endfor %} diff --git a/tests/test_views.py b/tests/test_views.py index 1f9a56449..f8ec1595b 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -40,7 +40,7 @@ def test_view_with_filterset_not_model(self): factory = RequestFactory() request = factory.get(self.base_url) filterset = filterset_factory(Book) - view = FilterView.as_view(filterset_class=filterset) + view = FilterView.as_view(filterset_class=filterset, queryset=Book.objects.all()) response = view(request) self.assertEqual(response.status_code, 200) for b in ['Ender's Game', 'Rainbow Six', 'Snowcrash']: @@ -123,6 +123,19 @@ class View(FilterView): self.assertEqual(message, expected) self.assertEqual(len(recorded), 0) + def test_view_with_unbound_filter_form_returns_initial_queryset(self): + factory = RequestFactory() + request = factory.get(self.base_url) + + queryset = Book.objects.filter(title='Snowcrash') + view = FilterView.as_view(model=Book, queryset=queryset) + + response = view(request) + titles = [o.title for o in response.context_data['object_list']] + + self.assertEqual(response.status_code, 200) + self.assertEqual(titles, ['Snowcrash']) + class GenericFunctionalViewTests(GenericViewTestCase): base_url = '/books-legacy/'