mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-09 14:54:48 +03:00
Depercate DjangoFilterBackend
This commit is contained in:
parent
6aa5837549
commit
53421bdc92
|
@ -98,15 +98,15 @@ The default filter backends may be set globally, using the `DEFAULT_FILTER_BACKE
|
||||||
You can also set the filter backends on a per-view, or per-viewset basis,
|
You can also set the filter backends on a per-view, or per-viewset basis,
|
||||||
using the `GenericAPIView` class-based views.
|
using the `GenericAPIView` class-based views.
|
||||||
|
|
||||||
|
import django_filters
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
|
||||||
from myapp.serializers import UserSerializer
|
from myapp.serializers import UserSerializer
|
||||||
from rest_framework import generics
|
from rest_framework import generics
|
||||||
|
|
||||||
class UserListView(generics.ListAPIView):
|
class UserListView(generics.ListAPIView):
|
||||||
queryset = User.objects.all()
|
queryset = User.objects.all()
|
||||||
serializer_class = UserSerializer
|
serializer_class = UserSerializer
|
||||||
filter_backends = (DjangoFilterBackend,)
|
filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
|
||||||
|
|
||||||
## Filtering and object lookups
|
## Filtering and object lookups
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ For more advanced filtering requirements you can specify a `FilterSet` class tha
|
||||||
from myapp.serializers import ProductSerializer
|
from myapp.serializers import ProductSerializer
|
||||||
from rest_framework import generics
|
from rest_framework import generics
|
||||||
|
|
||||||
class ProductFilter(django_filters.FilterSet):
|
class ProductFilter(django_filters.rest_framework.FilterSet):
|
||||||
min_price = django_filters.NumberFilter(name="price", lookup_expr='gte')
|
min_price = django_filters.NumberFilter(name="price", lookup_expr='gte')
|
||||||
max_price = django_filters.NumberFilter(name="price", lookup_expr='lte')
|
max_price = django_filters.NumberFilter(name="price", lookup_expr='lte')
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -218,7 +218,7 @@ filters using `Manufacturer` name. For example:
|
||||||
from myapp.serializers import ProductSerializer
|
from myapp.serializers import ProductSerializer
|
||||||
from rest_framework import generics
|
from rest_framework import generics
|
||||||
|
|
||||||
class ProductFilter(django_filters.FilterSet):
|
class ProductFilter(django_filters.rest_framework.FilterSet):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Product
|
model = Product
|
||||||
fields = ['category', 'in_stock', 'manufacturer__name']
|
fields = ['category', 'in_stock', 'manufacturer__name']
|
||||||
|
@ -234,7 +234,7 @@ This is nice, but it exposes the Django's double underscore convention as part o
|
||||||
from myapp.serializers import ProductSerializer
|
from myapp.serializers import ProductSerializer
|
||||||
from rest_framework import generics
|
from rest_framework import generics
|
||||||
|
|
||||||
class ProductFilter(django_filters.FilterSet):
|
class ProductFilter(django_filters.rest_framework.FilterSet):
|
||||||
manufacturer = django_filters.CharFilter(name="manufacturer__name")
|
manufacturer = django_filters.CharFilter(name="manufacturer__name")
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
|
|
@ -37,6 +37,17 @@ class BaseFilterBackend(object):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
class FilterSet(object):
|
||||||
|
def __new__(cls, *args, **kwargs):
|
||||||
|
warnings.warn(
|
||||||
|
"The built in 'rest_framework.filters.FilterSet' is pending deprecation. "
|
||||||
|
"You should use 'django_filters.rest_framework.FilterSet' instead.",
|
||||||
|
PendingDeprecationWarning
|
||||||
|
)
|
||||||
|
from django_filters.rest_framework import FilterSet
|
||||||
|
return FilterSet(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class DjangoFilterBackend(BaseFilterBackend):
|
class DjangoFilterBackend(BaseFilterBackend):
|
||||||
"""
|
"""
|
||||||
A filter backend that uses django-filter.
|
A filter backend that uses django-filter.
|
||||||
|
@ -47,7 +58,7 @@ class DjangoFilterBackend(BaseFilterBackend):
|
||||||
|
|
||||||
warnings.warn(
|
warnings.warn(
|
||||||
"The built in 'rest_framework.filters.DjangoFilterBackend' is pending deprecation. "
|
"The built in 'rest_framework.filters.DjangoFilterBackend' is pending deprecation. "
|
||||||
"You should now use 'django_filters.rest_framework.DjangoFilterBackend' instead.",
|
"You should use 'django_filters.rest_framework.DjangoFilterBackend' instead.",
|
||||||
PendingDeprecationWarning
|
PendingDeprecationWarning
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -147,8 +147,8 @@ class IntegrationTestFiltering(CommonFilteringTestCase):
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
self.assertEqual(response.data, self.data)
|
self.assertEqual(response.data, self.data)
|
||||||
|
|
||||||
self.assertTrue(issubclass(w[-1].category, DeprecationWarning))
|
self.assertTrue(issubclass(w[-1].category, PendingDeprecationWarning))
|
||||||
self.assertIn("'rest_framework.filters.DjangoFilterBackend' has been deprecated", str(w[-1].message))
|
self.assertIn("'rest_framework.filters.DjangoFilterBackend' is pending deprecation.", str(w[-1].message))
|
||||||
|
|
||||||
@unittest.skipUnless(django_filters, 'django-filter not installed')
|
@unittest.skipUnless(django_filters, 'django-filter not installed')
|
||||||
def test_no_df_deprecation(self):
|
def test_no_df_deprecation(self):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user