2011-03-22 66 views
2

我有一個類變量due_date一個Django模型類:如何比較Django中的日期?

due_date = models.DateField() 

我想在Django管理輸出對象是否到期或不基於今天的日期。

我的功能如下:

def is_due_today(self): 
    dd = self.due_date 
    today = datetime.date.now 
    return dd - today > 0 

但我的輸出是:

(None) 

我在做什麼錯?

回答

5

在Python中減去兩個datetime對象會爲您提供一個timedelta對象,該對象不能與整數進行比較。然而,你可以從它得到類似total_seconds()的東西,看它是否非零。

>>> now = datetime.datetime.now() 
# wait 3 seconds 
>>> now2 = datetime.datetime.now() 
>>> td = now2 - now 
>>> td.total_seconds() 
3.266 

所以你的情況,代碼看起來是這樣的(未經測試):

def is_due_today(self): 
    dd = self.due_date 
    delta = dd - datetime.date.today() 
    return delta.total_seconds() > 0 
+0

注:total_seconds()從Python 2.7版和超越。在此之前,請使用以下內容: * if delta larham1 2011-04-14 06:01:38

2

today應該是:

today = datetime.date.today() 

減去兩個日期時間日期對象給你一個timedelta。

>>> a - datetime.date.today() 
datetime.timedelta(0) 
>>> a = datetime.date.today() 
>>> a - a 
datetime.timedelta(0) 
>>> a - a == 0 
False 
>>> 
>>> a - a == datetime.timedelta(0) 
True 

此外,如果你正在檢查,如果今天的東西是因爲,你的條件語句可能需要改變:

today - today isn't going to be > 0 

如果你檢查逾期:

return self.due_date < datetime.date.today() 

今天檢查到期:

return self.due_date == datetime.date.today()