mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-05 04:50:12 +03:00
Merge c4cf24c57c
into fd72a814f8
This commit is contained in:
commit
68d5ba67c4
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user