Closed
Description
It seems like this test case should pass:
diff --git a/tests/test_backends.py b/tests/test_backends.py
index 1394e3a..88fb8d3 100644
--- a/tests/test_backends.py
+++ b/tests/test_backends.py
@@ -16,3 +16,14 @@ class BackendTest(APITestCase):
self.assertEqual(len(response.data), 1)
self.assertEqual(response.data[0]['username'], 'user1')
+
+ def test_django_filter_compatibility_twice(self):
+ response = self.client.get('/dffield-users/', {'username': 'user1'}, content_type='json')
+
+ self.assertEqual(len(response.data), 1)
+ self.assertEqual(response.data[0]['username'], 'user1')
+
+ response = self.client.get('/dffield-users/', {'username': 'user1'}, content_type='json')
+
+ self.assertEqual(len(response.data), 1)
+ self.assertEqual(response.data[0]['username'], 'user1')
diff --git a/tests/testapp/urls.py b/tests/testapp/urls.py
index 23e87ba..5f7b405 100644
--- a/tests/testapp/urls.py
+++ b/tests/testapp/urls.py
@@ -7,6 +7,7 @@ from . import views
router = routers.DefaultRouter()
router.register(r'df-users', views.DFUserViewSet, base_name='df-users')
+router.register(r'dffield-users', views.DFFieldUserViewSet, base_name='dffield-users')
router.register(r'users', views.UserViewSet,)
router.register(r'notes', views.NoteViewSet,)
diff --git a/tests/testapp/views.py b/tests/testapp/views.py
index 7e3956f..75761a0 100644
--- a/tests/testapp/views.py
+++ b/tests/testapp/views.py
@@ -16,6 +16,17 @@ class DFUserViewSet(viewsets.ModelViewSet):
filter_class = DFUserFilter
+class DFFieldUserViewSet(viewsets.ModelViewSet):
+ # used to test compatibility with the drf-filters backend
+ # with standard django-filter FilterSets.
+ queryset = User.objects.all()
+ serializer_class = UserSerializer
+ filter_backends = (backends.DjangoFilterBackend, )
+ filter_fields = {
+ 'username': '__all__'
+ }
+
+
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
But it fails on the second get
. It looks like the generation of fields runs through and deletes the Meta.fields which is a reference to the underlying filter_fields
which are then deleted.
On the second API call, the get_filter_class
will return None
because there are no filter_fields
or filter_class
causing no filtering to be applied.
Metadata
Metadata
Assignees
Labels
No labels