Piyush
Piyush

Reputation: 599

How to create datetime filter using Django Rest Framework Filters

I am trying to create the datetime filter but my class is not working as expected. I have used this package to do so. I am not getting any error but also I am not getting any error also, Here is my filter class :

import rest_framework_filters as filters
from core import models

class FeedFilter(filters.FilterSet):
    timestamp_gte  = filters.DateTimeFromToRangeFilter()
    class Meta:
        model = models.MQTTFeedWeather
        fields = {
            'created_at': ('lte', 'gte')
        }

Model Class :

class MQTTFeedWeather(models.Model):
    sensor = models.ForeignKey(
        'SensorDevice',
        on_delete = models.CASCADE
    )
    feed = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)

And my views as :

class DeviceFeedListAPI(generics.ListAPIView):
    authentication_classes = (authentication.TokenAuthentication,)
    permission_classes = (permissions.IsAuthenticated, permissions.IsAuthenticated,)
    queryset = models.MQTTFeedWeather.objects.all()
    serializer_class = serializers.WeatherFeedSerializer
    pagination_class = pagination.PostLimitOffsetPagination
    filter_backends = (DjangoFilterBackend,OrderingFilter,SearchFilter)
    filter_class = filters.FeedFilter
    search_fields = ('feed',)

I want to create a datetime filter on created_at table. When I am running the url :

http://172.61.25.51:8080/api/admin/application_feed/?created_at__range=2019-12-01,2020-01-08

Its not filtering the data. Can any body help me what i am doing wrong here!! Thanks!

Upvotes: 0

Views: 2437

Answers (1)

Baktiyar Bekbergen
Baktiyar Bekbergen

Reputation: 384

Hi you can try like this

class FeedFilter(django_filters.rest_framework.FilterSet):
    start_date = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='gte')
    end_date = django_filters.DateTimeFilter(field_name='created_at', lookup_expr='lte')

    class Meta:
        model = MQTTFeedWeather
        fields = ('start_date', 'end_date')

http://172.61.25.51:8080/api/admin/application_feed/?start_date=2019-12-01&end_date2020-01-08

Upvotes: 2

Related Questions