From 96523b688339bd39d89af72993867b04c923d0e8 Mon Sep 17 00:00:00 2001 From: Kieran Spear Date: Mon, 24 Oct 2016 13:06:18 +0800 Subject: [PATCH] Fix FilterSet proxying --- rest_framework/filters.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/rest_framework/filters.py b/rest_framework/filters.py index 47d9a0342..785989735 100644 --- a/rest_framework/filters.py +++ b/rest_framework/filters.py @@ -37,15 +37,21 @@ class BaseFilterBackend(object): 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) +if django_filters: + from django_filters.filterset import FilterSetMetaclass as DFFilterSetMetaclass + from django_filters.rest_framework.filterset import FilterSet as DFFilterSet + + class FilterSetMetaclass(DFFilterSetMetaclass): + def __new__(cls, name, bases, attrs): + warnings.warn( + "The built in 'rest_framework.filters.FilterSet' is pending deprecation. " + "You should use 'django_filters.rest_framework.FilterSet' instead.", + PendingDeprecationWarning + ) + return super(FilterSetMetaclass, cls).__new__(cls, name, bases, attrs) + + class FilterSet(six.with_metaclass(FilterSetMetaclass, DFFilterSet)): + pass class DjangoFilterBackend(BaseFilterBackend):