簡體   English   中英

Django:timezone.now()不返回當前日期時間

[英]Django: timezone.now() does not return current datetime

通過Django Rest Framework API,我試圖在將來為所有具有日期時間的對象提供服務。

問題是,一旦服務器啟動,每次我提交查詢時,API將為所有日期時間大於服務器啟動日期時間的對象提供服務,而不是日期時間大於當前時間的對象。

from django.utils import timezone

class BananasViewSet(viewsets.ReadOnlyModelViewSet):
    queryset = Banana.objects.filter(date_and_time__gte=timezone.now())
    ...

沒有更多的運氣,我也試過這個變化:

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())
    ...

在Django shell中進行類似的查詢可以正確地返回對象...

由於當前正在編寫應用程序代碼,因此當首次從任何地方導入類時,您運行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)
timezone.now()

此函數返回當前時間。 它不會返回服務器啟動的時間。 因此,根據您的查詢,您要求在模型Banana上使用date_and_time字段大於當前時間的過濾器。

這個查詢實際上似乎不合適,因為在date_and_time字段大於或等於timezone.now()的時候不能創建任何對象。

這樣的東西不會更好地放入構造函數中,這樣你就能預測到timezone.now()實際被調用的時間嗎?

from django.utils import timezone

class BananasViewSet(viewsets.ReadOnlyModelViewSet):

    def __init__(self,*args,**kwargs):
        super(BananasViewSet,self).__init__(*args,**kwargs)
        self.queryset = Banana.objects.filter(date_and_time__gte=timezone.now())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM