Возможно, вы могли бы определить свой собственный фильтр с помощью пользовательских методов и использовать эту библиотеку django-filters :
from django_filters import rest_framework as filters
class EventFilter(filters.FilterSet):
finish_on = filters.BooleanFilter(name='finish_on', method='filter_manifestation')
begin_on = filters.BooleanFilter(name='begin_on', method='filter_manifestation')
def filter_manifestation(self, queryset, name, value):
if value is False:
lookup = '__'.join([name, 'gte'])
else:
lookup = '__'.join([name, 'lte'])
qs = queryset.filter(**{lookup: timezone.now()})
return qs
class Meta:
model = Event
fields = [
'finished', 'has_begun'
]
И добавить этот фильтр в ваше представление:
class ManifestationViewSet(viewsets.ReadOnlyModelViewSet):
...
filter_class = EventFilter
...
Затем вы можете адаптировать таможенные методы вашего фильтра в зависимости от того, что вы хотите сделать, в связанной функции настраиваемого поля вашего сериализатора.
У вас есть несколько фрагментов в документе библиотеки django-filter о различных типах фильтров.