Skip to content

Instantly share code, notes, and snippets.

@maxpoletaev
Created June 20, 2017 20:06
Show Gist options
  • Save maxpoletaev/022b951e72efdb4fec27c287dde83e1a to your computer and use it in GitHub Desktop.
Save maxpoletaev/022b951e72efdb4fec27c287dde83e1a to your computer and use it in GitHub Desktop.
from django_filters import rest_framework as drf_filters
import copy
class NestedFilter:
def __init__(self, filterset, name, prefix=''):
self.filterset = filterset
self.name = name
self.prefix = prefix
def iter_filters(self):
for name, filter_ in self.filterset.get_filters().items():
yield name, copy.copy(filter_)
class NestableFilterSetMixin:
nested_filters = []
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for nested in self.nested_filters:
for name, filter_ in nested.iter_filters():
filter_.name = '{}__{}'.format(nested.name, filter_.name)
self.filters[nested.prefix + name] = filter_
class NestableDrfFilterSet(NestableFilterSetMixin, drf_filters.FilterSet):
pass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment