django - Unable to filter using a DateTimeFilter, all results returned instead -
i'm trying implement basic "starts before"/"starts after" filter 1 of models. unfortunately, filter never gets applied. doing wrong?
model
class shift(models.model): ...snip... start_time = models.datetimefield() end_time = models.datetimefield() ...snip... class meta: ordering = ('station', 'employee', 'confirmed', 'start_time',) filterset
import django_filters serverapp.models import shift class shiftfilter(django_filters.filterset): """ filter enable fetching shifts within date range """ # specify url parameters can use filtering start_before = django_filters.datetimefilter( name="start_time", lookup_type="lte") start_after = django_filters.datetimefilter( name="start_time", lookup_type="gte") class meta: # specify mode we're filtering on model = shift # specify fields can filter (in case # 2 above) fields = ['start_before', 'start_after'] view
class shiftviewset(viewsets.modelviewset): serializer_class = shiftserializer filter_class = shiftfilter ...snip... query (using httpie)
http http://127.0.0.1:8000/v1/shifts/?start_before=2015-04-23 http http://127.0.0.1:8000/v1/shifts/?start_after=2015-04-23 records
id start_time end_time 13 2015-04-16 16:18:13 2015-04-17 16:18:13 14 2015-04-16 16:18:13 2015-04-17 16:18:13 15 2015-04-24 16:18:13 2015-04-24 17:18:13 i expect start_before=2015-04-23 return 2 records dated 04/16/2015, , start_after=2015-04-23 return 1 record dated 04/24/2015. unfortunately, regardless of of 2 queries run, 3 records.
this seemed simple thing implement, how have screwed up?
if wanna use django_filters, please add filters.djangofilterbackend filter_backends.
for global :
settings.py
rest_framework = { #... # !!! it's list or tuple !!! # of course, can add other backends "default_filter_backends": ( 'rest_framework.filters.djangofilterbackend', ) #... } for specific view:
class shiftviewset(viewsets.modelviewset): serializer_class = shiftserializer filter_class = shiftfilter filter_backends = (filters.djangofilterbackend,)
Comments
Post a Comment