1

I am trying to filter users based on the date joined. but it somehow it requires the time also even though i formatted it to only have the date, for example "2020-05-08".

class UserSerializer(serializers.ModelSerializer):
   date_joined = serializers.DateTimeField(
        format='%Y-%m-%d', input_formats=None)

    class Meta:
        model = User
        fields = ['__all__']
class UserViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = User.objects.all()

    serializer_class = UserSerializer
    filter_backends = [ DjangoFilterBackend]
    filterset_fields = ['date_joined']
{
    "date_joined": [
        "Enter a valid date/time."
    ]
}

Naterz
  • 387
  • 4
  • 14

1 Answers1

0

You should use DateField in your serializer instead of DateTimeField:

https://www.django-rest-framework.org/api-guide/fields/#datefield

If you have the DateTimeField in your model (and I guess, you are, as it seems, that you are using standard User) you will need to use the corresponding serializer field. If you want to have the DateTimeField in your model, but filter only by the date you should customize your view/serializer/filter.

The easiest way to do it will be something like:

class UserViewSet(viewsets.ReadOnlyModelViewSet):
    serializer_class = UserSerializer

    def get_queryset(self):
        some_date = self.request.GET.get('date')
        qs = User.objects.all()
        if date:
             #filter depends of what exactly do you want
             return qs.filter(date_joined__contains=some_date)
        return qs

You can check out the examples of date filters here:

How do I filter query objects by date range in Django?

Igor Belkov
  • 446
  • 3
  • 8