Фильтрация пользователей по дате присоединения - PullRequest
1 голос
/ 08 мая 2020

Я пытаюсь отфильтровать пользователей по дате присоединения. но это почему-то требует времени, хотя я отформатировал его, чтобы иметь только дату, например «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."
    ]
}

1 Ответ

0 голосов
/ 08 мая 2020

Вы должны использовать DateField в сериализаторе вместо DateTimeField:

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

Если у вас есть DateTimeField в вашей модели (и я думаю, вы (похоже, что вы используете стандартного пользователя), вам нужно будет использовать соответствующее поле сериализатора. Если вы хотите иметь DateTimeField в своей модели, но фильтровать только по дате, вам следует настроить представление / сериализатор / фильтр.

Самый простой способ сделать это будет примерно так:

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

Вы можете проверить примеры фильтров даты здесь:

Как фильтровать запрашивать объекты по диапазону дат в Django?

...