mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-07-30 18:09:59 +03:00
Merge af48db8258
into 599c0eb0db
This commit is contained in:
commit
dd2b5e1b14
|
@ -38,10 +38,8 @@ class DjangoFilterBackend(BaseFilterBackend):
|
||||||
"""
|
"""
|
||||||
filter_class = getattr(view, 'filter_class', None)
|
filter_class = getattr(view, 'filter_class', None)
|
||||||
filter_fields = getattr(view, 'filter_fields', None)
|
filter_fields = getattr(view, 'filter_fields', None)
|
||||||
model_cls = getattr(view, 'model', None)
|
queryset = view.get_queryset()
|
||||||
queryset = getattr(view, 'queryset', None)
|
model_cls = queryset.model
|
||||||
if model_cls is None and queryset is not None:
|
|
||||||
model_cls = queryset.model
|
|
||||||
|
|
||||||
if filter_class:
|
if filter_class:
|
||||||
filter_model = filter_class.Meta.model
|
filter_model = filter_class.Meta.model
|
||||||
|
|
|
@ -70,9 +70,19 @@ if django_filters:
|
||||||
filter_fields = ['decimal', 'date']
|
filter_fields = ['decimal', 'date']
|
||||||
filter_backend = filters.DjangoFilterBackend
|
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('',
|
urlpatterns = patterns('',
|
||||||
url(r'^(?P<pk>\d+)/$', FilterClassDetailView.as_view(), name='detail-view'),
|
url(r'^(?P<pk>\d+)/$', FilterClassDetailView.as_view(), name='detail-view'),
|
||||||
url(r'^$', FilterClassRootView.as_view(), name='root-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]
|
expected_data = [f for f in self.data if f['decimal'] == search_decimal]
|
||||||
self.assertEqual(response.data, expected_data)
|
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')
|
@unittest.skipUnless(django_filters, 'django-filters not installed')
|
||||||
def test_get_filtered_class_root_view(self):
|
def test_get_filtered_class_root_view(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user