Django:timezone.now()不返回当前日期时间

Arn*_*aud 2 python django datetime django-rest-framework

通过Django Rest Framework API,我试图在将来为所有具有日期时间的对象提供服务.

问题是,一旦服务器启动,每次我提交查询时,API将为所有日期时间大于服务器启动日期时间的对象提供服务,而不是日期时间大于当前时间的对象.

from django.utils import timezone

class BananasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Banana.objects.filter(date_and_time__gte=timezone.now())
    ...
Run Code Online (Sandbox Code Playgroud)

没有更多的运气,我也试过这个变化:

import datetime as dt

class BananasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Banana.objects.filter(date_and_time__gte=
        timezone.make_aware(dt.datetime.now(), timezone.get_current_timezone())
    ...
Run Code Online (Sandbox Code Playgroud)

在Django shell中进行类似的查询可以正确地返回对象...

Tom*_*tie 7

由于应用程序代码当前已编写,因此您timezone.now()首次从任何位置导入类时都会运行一次.

而不是在类属性本身上应用时间查询集过滤,而是在get_queryset()方法中执行此操作,以便在每次传递时重新评估它.

例如.

class BananasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Banana.objects.all()

    def get_queryset(self):
        cutoff = timezone.now()
        return self.queryset.filter(date_and_time__gte=cutoff)
Run Code Online (Sandbox Code Playgroud)