[英]how to subtract a date from today in django model
模型.py
import datetime as dt
class Campaign(models.Model):
enddate = models.DateField()
def rest_of_the_day(self):
now = dt.datetime.now().date()
print('printing now value')
print(now)
print(self.campaign_enddate)
return (self.campaign_enddate-now).days
在views.py中
def landing_page(request):
campaigns = Campaign.objects.all().order_by('-id')
return render(request, 'core/landing_page.html',{'campaigns':campaigns})
在 html 模板中
<span>{{campaign.rest_of_the_day}}</span>
我正在嘗試使用 models.py 中的 rest_of_the_day 函數存儲結束日期並在 html 文件中顯示結束日期的剩余天數
例如:如果結束日期是 30-01-2010 而今天是 15-01-2020,我希望 rest_of_the_day 顯示 15
但是,我在 / 不支持的操作數類型處收到TypeError for -: 'NoneType' 和 'datetime.date'
似乎self.campaign_enddate
是None
。 這是有道理的,因為它不是您定義的字段。 您可以使用enddate
:
class Campaign(models.Model):
enddate = models.DateField()
def rest_of_the_day(self):
return (self.enddate-dt.date.today()).days
但是,您可以在此處使用|timeuntil
模板過濾器 [Django-doc] :
<span>{{ campaign.enddate|timeuntil }}</span>
這使得處理某個日期(時間)發生之前的時間量變得更加方便。
另一種選擇是在查詢中使用數據庫函數將列添加到 QuerySet 結果。
這里 QuerySet 結果中的每個活動對象都將具有datetime.timedelta
類型的td
列。
from django.db.models.functions import Extract, Now, Trunc
campaigns = Campaign.objects.all().order_by('-id').annotate(
td=F('enddate') - Now()
)
或者添加Trunc結果td
列將是datetime.timedelta
對象,只有幾天我們還需要將日期和日期時間之間的計算轉換為一種類型/輸出字段。
campaigns = Campaign.objects.all().order_by('-id').annotate(
td=Trunc(
F('enddate') - Now(),
'day',
output_field=models.DateField()
)
)
請注意,您將操作datetime.timedelta
對象。 此外,在不同部分( Now()
、 F('enddate')
、 whole expression
、不同組合)上添加Trunc
可能會由於天數的四舍五入和減去方式而產生略有不同的結果。 你可以試驗一下。
要將結果作為整數(天) 提取功能可以添加到組合中:
campaigns = Campaign.objects.all().order_by('-id').annotate(
td=Extract(
F('enddate') - Trunc(Now(), 'day', output_field=models.DateField()),
'day'
)
)
這里td
將是整數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.