![](/img/trans.png)
[英]Django datetime.timedelta , how does its subtract from timezone.now() if they are posssibly different sets
[英]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.