get_queryset with django-filter wasn't working

DjangoFilterBackend didn't work when only
specifying serializer_class and get_queryset
This commit is contained in:
Jacob Magnusson 2013-05-14 15:55:59 +02:00
parent d199a89c18
commit af48db8258
2 changed files with 20 additions and 4 deletions

View File

@ -38,9 +38,7 @@ class DjangoFilterBackend(BaseFilterBackend):
"""
filter_class = getattr(view, 'filter_class', None)
filter_fields = getattr(view, 'filter_fields', None)
model_cls = getattr(view, 'model', None)
queryset = getattr(view, 'queryset', None)
if model_cls is None and queryset is not None:
queryset = view.get_queryset()
model_cls = queryset.model
if filter_class:

View File

@ -70,9 +70,19 @@ if django_filters:
filter_fields = ['decimal', 'date']
filter_backend = filters.DjangoFilterBackend
class GetQuerysetView(generics.ListCreateAPIView):
serializer_class = FilterableItemSerializer
filter_class = SeveralFieldsFilter
filter_backend = filters.DjangoFilterBackend
def get_queryset(self):
return FilterableItem.objects.all()
urlpatterns = patterns('',
url(r'^(?P<pk>\d+)/$', FilterClassDetailView.as_view(), name='detail-view'),
url(r'^$', FilterClassRootView.as_view(), name='root-view'),
url(r'^get-queryset/$', GetQuerysetView.as_view(),
name='get-queryset-view'),
)
@ -147,6 +157,14 @@ class IntegrationTestFiltering(CommonFilteringTestCase):
expected_data = [f for f in self.data if f['decimal'] == search_decimal]
self.assertEqual(response.data, expected_data)
@unittest.skipUnless(django_filters, 'django-filters not installed')
def test_filter_with_get_queryset_only(self):
view = GetQuerysetView.as_view()
request = factory.get('/get-queryset/')
view(request).render()
# Used to raise "issubclass() arg 2 must be a class or tuple of classes"
# here when neither `model' nor `queryset' was specified.
@unittest.skipUnless(django_filters, 'django-filters not installed')
def test_get_filtered_class_root_view(self):
"""