diff --git a/rest_framework/filters.py b/rest_framework/filters.py index 20e196a14..9373504d6 100644 --- a/rest_framework/filters.py +++ b/rest_framework/filters.py @@ -55,6 +55,24 @@ else: assert False, 'django-filter must be installed to use the `FilterSet` class' +class SimpleDjangoFilterBackend(BaseFilterBackend): + """ + Really simple class that allows straightforward Django ORM filtering. + """ + def filter_queryset(self, request, queryset, view): + filter_fields = getattr(view, 'filter_fields', None) + if filter_fields is None: + filter_fields = request.QUERY_PARAMS.keys() + # reduce relations to entry point only + fields = [field.split('__')[0] for field in filter_fields] + params = {} + for k, v in request.QUERY_PARAMS.iteritems(): + # if entry point matches, collect the original key + if k.split('__')[0] in fields: + params.update({k: v[0] if isinstance(v, list) else v}) + return queryset.filter(**params) + + class DjangoFilterBackend(BaseFilterBackend): """ A filter backend that uses django-filter.