|
9 | 9 | from rest_framework import generics, serializers, status, filters
|
10 | 10 | from rest_framework.compat import django_filters
|
11 | 11 | from rest_framework.test import APIRequestFactory
|
12 |
| -from .models import FilterableItem, BasicModel |
| 12 | +from .models import BaseFilterableItem, FilterableItem, BasicModel |
13 | 13 | from .utils import temporary_setting
|
14 | 14 |
|
15 | 15 | factory = APIRequestFactory()
|
@@ -55,6 +55,18 @@ class FilterClassDetailView(generics.RetrieveAPIView):
|
55 | 55 | filter_class = SeveralFieldsFilter
|
56 | 56 | filter_backends = (filters.DjangoFilterBackend,)
|
57 | 57 |
|
| 58 | + # These classes are used to test base model filter support |
| 59 | + class BaseFilterableItemFilter(django_filters.FilterSet): |
| 60 | + text = django_filters.CharFilter() |
| 61 | + |
| 62 | + class Meta: |
| 63 | + model = BaseFilterableItem |
| 64 | + |
| 65 | + class BaseFilterableItemFilterRootView(generics.ListCreateAPIView): |
| 66 | + model = FilterableItem |
| 67 | + filter_class = BaseFilterableItemFilter |
| 68 | + filter_backends = (filters.DjangoFilterBackend,) |
| 69 | + |
58 | 70 | # Regression test for #814
|
59 | 71 | class FilterableItemSerializer(serializers.ModelSerializer):
|
60 | 72 | class Meta:
|
@@ -226,6 +238,18 @@ def test_incorrectly_configured_filter(self):
|
226 | 238 | request = factory.get('/')
|
227 | 239 | self.assertRaises(AssertionError, view, request)
|
228 | 240 |
|
| 241 | + @unittest.skipUnless(django_filters, 'django-filter not installed') |
| 242 | + def test_base_model_filter(self): |
| 243 | + """ |
| 244 | + The `get_filter_class` model checks should allow base model filters. |
| 245 | + """ |
| 246 | + view = BaseFilterableItemFilterRootView.as_view() |
| 247 | + |
| 248 | + request = factory.get('/?text=aaa') |
| 249 | + response = view(request).render() |
| 250 | + self.assertEqual(response.status_code, status.HTTP_200_OK) |
| 251 | + self.assertEqual(len(response.data), 1) |
| 252 | + |
229 | 253 | @unittest.skipUnless(django_filters, 'django-filter not installed')
|
230 | 254 | def test_unknown_filter(self):
|
231 | 255 | """
|
|
0 commit comments