DRF
Filterset
Now let's take a look at the filtersets.py - here we define filtering of our viewset.
# filtersets.py
import simplefilters as filters
class Todo(filters.FilterSet):
    @filters.CharFilter(many=True)
    def filter_status(self, qs, values):
        return qs.filter(status__in=values)
    @filters.DateTimeFilter()
    def filter_modified_after(self, qs, value):
        return qs.filter(modified_at__gte=value)
Viewset
Here is a pretty standard viewset for Todo model. Note that at this point we simply replace DRF's filters with simplefilters.
# views.py
from . import filtersets
from . import models
from . import serializers
from rest_framework.viewsets import ModelViewSet
import simplefilters as filters
class TodoViewSet(ModelViewSet):
    queryset = models.Todo.objects.all()
    serializer_class = serializers.Todo
    filter_backends = [filters.DjangoFilterBackend]
    filter_class = filtersets.Todo
    class Meta:
        model = models.Todo
todo_list = TodoViewSet.as_view({'get': 'list'})
View
It's easy to use filtersets at plain DRF api views too.
from . import filtersets
from . import models
from . import serializers
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.viewsets import ModelViewSet
import simplefilters as filters
@api_view(['GET'])
def todo_list(request):
    queryset = models.Todo.objects.all()
    fs = filtersets.Todo()
    qs = fs.perform_filtering(request, queryset)
    serializer = serializers.Todo(qs, many=True)
    return Response(serializer.data)