Набор запросов DRF ModelViewSet возвращает результаты о том, что их дата больше или равна сегодняшней - PullRequest
1 голос
/ 08 марта 2020

Я использую Django Rest Framework.

В наборе запросов я пытаюсь отфильтровать свои объекты на основе ЕСЛИ их Дата больше или равна сегодняшнему дню. Примерно так:

class DateViewSet(viewsets.ModelViewSet):
    """
    API Endpoint to retrieve all dates after today.
    """
    serializer_class = DateSerializer
    today = datetime.date.today()
    queryset = EventDate.objects.filter(end_date__gte=today)

Но это также показывает прошлые даты.

мой сериализатор:

class DateSerializer(serializers.ModelSerializer):
    class Meta:
        model = EventDate
        fields = ('start_date', 'end_date')

И затем я передаю его в сериализатор событий:

class EventSerializer(serializers.HyperlinkedModelSerializer):
    id = serializers.StringRelatedField()
    dates = DateSerializer(many=True, read_only=True)

    class Meta:
        model = Event
        fields = '__all__'
        extra_kwargs = {
            'url': {'lookup_field': 'slug'},
        }

Моя цель - когда мой API возвращает все события, которые он не должен вернуть все даты, которые были в прошлом.

Что я делаю не так?

1 Ответ

3 голосов
/ 08 марта 2020

Проблема в том, что today = datetime.date.today() будет оцениваться, когда вы создаете класс, а не каждый раз, когда вам нужно получить эти атрибуты.

Вы можете переопределить метод get_queryset для получения сделать запрос с датой, когда запрос сделан:

from django.utils.timezone import now

class DateViewSet(viewsets.ModelViewSet):
    """
    API Endpoint to retrieve all dates after today.
    """
    serializer_class = DateSerializer

    def <b>get_queryset</b>(self, *args, **kwargs):
        EventDate.objects.filter(end_date__gte=now().date())
...