Skip to content

Instantly share code, notes, and snippets.

@walison17
Last active May 23, 2020 15:21
Show Gist options
  • Save walison17/821244c1be1bae33492ce0be614b2d22 to your computer and use it in GitHub Desktop.
Save walison17/821244c1be1bae33492ce0be614b2d22 to your computer and use it in GitHub Desktop.
from django.db.models import Q
from django_rest import filters
class DateRangeFilterBackend(filters.BaseFilterBackend):
field_name = None
base_query_param = None
suffix_lookups = {
'inicio': 'date__gte',
'fim': 'date__lte'
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
assert self.field_name is not None, 'Você deve definir o nome do campo'
self.base_query_param = self.base_query_param or self.field_name
def filter_queryset(self, request, queryset, view):
query_filter = Q()
for query_param, lookup in self.get_query_lookups():
query = request.query_params.get(query_param)
if query:
query_filter &= Q(**{lookup: query})
return queryset.filter(query_filter)
def get_query_lookups(self):
return [
(f'{self.base_query_param}_{suffix}', f'{self.field_name}__{lookup}')
for suffix, lookup in self.suffix_lookups.items()
]
class DataElaboracaoFilterBackend(DateRangeFilterBackend):
field_name = 'data_elaboracao'
base_query_param = 'elaborado_em'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment