DRF ModelViewSet queryset返回日期大于或等于今天的结果

2024-04-26 11:52:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django Rest框架

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

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

我做错了什么


Tags: 对象程序apitodaydate序列化allmeta
1条回答
网友
1楼 · 发布于 2024-04-26 11:52:13

问题是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())

相关问题 更多 >