mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-25 19:14:01 +03:00
Merge pull request #5117 from rpkilby/fix-filter-backend
Fix DjangoFilterBackend mro
This commit is contained in:
commit
69b0ac52c2
|
@ -1,6 +1,6 @@
|
||||||
# Optional packages which may be used with REST framework.
|
# Optional packages which may be used with REST framework.
|
||||||
markdown==2.6.4
|
markdown==2.6.4
|
||||||
django-guardian==1.4.8
|
django-guardian==1.4.8
|
||||||
django-filter==1.0.0
|
django-filter==1.0.2
|
||||||
coreapi==2.2.4
|
coreapi==2.2.4
|
||||||
coreschema==0.0.4
|
coreschema==0.0.4
|
||||||
|
|
|
@ -50,12 +50,17 @@ if django_filters:
|
||||||
DeprecationWarning
|
DeprecationWarning
|
||||||
)
|
)
|
||||||
return super(FilterSet, self).__init__(*args, **kwargs)
|
return super(FilterSet, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
DFBase = django_filters.rest_framework.DjangoFilterBackend
|
||||||
|
|
||||||
else:
|
else:
|
||||||
def FilterSet():
|
def FilterSet():
|
||||||
assert False, 'django-filter must be installed to use the `FilterSet` class'
|
assert False, 'django-filter must be installed to use the `FilterSet` class'
|
||||||
|
|
||||||
|
DFBase = BaseFilterBackend
|
||||||
|
|
||||||
class DjangoFilterBackend(BaseFilterBackend):
|
|
||||||
|
class DjangoFilterBackend(DFBase):
|
||||||
"""
|
"""
|
||||||
A filter backend that uses django-filter.
|
A filter backend that uses django-filter.
|
||||||
"""
|
"""
|
||||||
|
@ -69,9 +74,7 @@ class DjangoFilterBackend(BaseFilterBackend):
|
||||||
DeprecationWarning
|
DeprecationWarning
|
||||||
)
|
)
|
||||||
|
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
return super(DjangoFilterBackend, cls).__new__(cls, *args, **kwargs)
|
||||||
|
|
||||||
return DjangoFilterBackend(*args, **kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
class SearchFilter(BaseFilterBackend):
|
class SearchFilter(BaseFilterBackend):
|
||||||
|
|
|
@ -201,6 +201,21 @@ class IntegrationTestFiltering(CommonFilteringTestCase):
|
||||||
assert response.data == self.data
|
assert response.data == self.data
|
||||||
assert len(w) == 0
|
assert len(w) == 0
|
||||||
|
|
||||||
|
@unittest.skipUnless(django_filters, 'django-filter not installed')
|
||||||
|
def test_backend_mro(self):
|
||||||
|
class CustomBackend(filters.DjangoFilterBackend):
|
||||||
|
def filter_queryset(self, request, queryset, view):
|
||||||
|
assert False, "custom filter_queryset should run"
|
||||||
|
|
||||||
|
class DFFilterFieldsRootView(FilterFieldsRootView):
|
||||||
|
filter_backends = (CustomBackend,)
|
||||||
|
|
||||||
|
view = DFFilterFieldsRootView.as_view()
|
||||||
|
request = factory.get('/')
|
||||||
|
|
||||||
|
with pytest.raises(AssertionError, message="custom filter_queryset should run"):
|
||||||
|
view(request).render()
|
||||||
|
|
||||||
@unittest.skipUnless(django_filters, 'django-filter not installed')
|
@unittest.skipUnless(django_filters, 'django-filter not installed')
|
||||||
def test_get_filtered_fields_root_view(self):
|
def test_get_filtered_fields_root_view(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user