Filter DateTimeField Django Rest Framework

I'm building an API with the django rest framework. I have this model:

class Versement(models.Model):
     date = models.DateTimeField()
     organisme = models.ForeignKey(Organisme, on_delete=models.CASCADE, null=True)

This is my view:

class VersementViewSet(viewsets.ModelViewSet):
     queryset = Versement.objects.all()
     serializer_class = VersementSerializer
     pagination_class = StandardResultsSetPagination
     filter_backends = (filters.SearchFilter, DjangoFilterBackend,)
     filter_class = VersementFilter
     search_fields = ('organisme__nom', 'organisme__code')

And my filter:

class VersementFilter(django_filters.FilterSet):
    class Meta:
        model = Versement
        fields = ['organisme__id']

Is it possible to add the field "date" to my fields and only search for a special year ? For example:

{{URL}}/versements/?date=2015

If you guys know how to proceed... Thank you in advance.

Upvotes: 2

Views: 284

Answers (1)

neverwalkaloner
neverwalkaloner

Reputation: 47354

You can define filter field explicitly and specify lookup_expr='year':

class VersementFilter(django_filters.FilterSet):
    date = django_filters.NumberFilter(field_name='date', lookup_expr='year')

    class Meta:
        model = Versement
        fields = ['organisme__id', 'date']

Upvotes: 1

Related Questions