1

我正在使用 Django 休息框架。

在查询集中,我试图根据它们的日期是否大于或等于今天来过滤我的对象。像这样:

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 返回所有事件时,它不应该返回过去的所有日期。

我究竟做错了什么?

4

1 回答 1

4

问题是当你构造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 get_queryset(self, *args, **kwargs):
        EventDate.objects.filter(end_date__gte=now().date())
于 2020-03-08T17:01:56.847 回答