From f4409fd2589fb67551499962dc97f7fef42a9cb5 Mon Sep 17 00:00:00 2001 From: Kieran Spear Date: Tue, 25 Oct 2016 10:25:01 +0800 Subject: [PATCH] Add friendly error message when django-filter isn't installed --- rest_framework/filters.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/rest_framework/filters.py b/rest_framework/filters.py index 785989735..531531efc 100644 --- a/rest_framework/filters.py +++ b/rest_framework/filters.py @@ -49,9 +49,20 @@ if django_filters: PendingDeprecationWarning ) return super(FilterSetMetaclass, cls).__new__(cls, name, bases, attrs) + _BaseFilterSet = DFFilterSet +else: + # Dummy metaclass just so we can give a user-friendly error message. + class FilterSetMetaclass(type): + def __init__(self, name, bases, attrs): + # Assert only on subclasses, so we can define FilterSet below. + if bases != (object,): + assert False, 'django-filter must be installed to use the `FilterSet` class' + super(FilterSetMetaclass, self).__init__(name, bases, attrs) + _BaseFilterSet = object - class FilterSet(six.with_metaclass(FilterSetMetaclass, DFFilterSet)): - pass + +class FilterSet(six.with_metaclass(FilterSetMetaclass, _BaseFilterSet)): + pass class DjangoFilterBackend(BaseFilterBackend):