2015-05-15 24 views
2

我想在我的Django應用程序中獲取用戶帳戶的「年齡」。這是我做的:在Django中減去日期時間 - 無輸出

class UserData(models.Model): 
    user = models.ForeignKey(User,unique=True) 
    birth = models.IntegerField(default=1900) 
    gender = models.CharField(max_length=1) 

    @property 
    def isNew(self): 
     if (datetime.datetime.now()-self.user.date_joined) < datetime.timedelta(days=40): 
      return True; 
     else: 
      return False; 

在我的模板中有一個不同的視圖取決於此函數的輸出。但基本沒有輸出。

當簡單地「打印」輸出時,根本沒有返回。顯示日期時,返回「datetime」和「date_joined」。返回「datetime.datetime」的返回str(type())時。但是,當返回差異(或差異的類型)時,絕對沒有返回。在我的python控制檯中執行相同的操作時,會返回timedelta - 正是我所期望的。

任何想法在哪裏搜索下一個?我無法弄清楚發生了什麼事情可以完全防止此功能在不崩潰應用程序的情況下提供任何輸出。

+0

你能告訴我們你的模型? – Charlesthk

+0

我現在增加了完整的模型;) –

回答

1

使用分號您試圖抵消。減去天真和偏移感知日期時間。

您需要安裝pytz pip install pytz並用以下更改方法:

import datetime, pytz 

@property 
def isNew(self): 
    return pytz.utc.localize(datetime.datetime.now())-self.user.date_joined < datetime.timedelta(days=40) 
+0

這解決了這個問題 - 非常感謝。爲什麼在這種情況下有不同類型的日期時間? –

+1

您有抵消感知和偏移樸素日期時間。當您使用datetime.datetime.now()時,您的應用程序不知道使用哪個時區。更多信息:https://docs.djangoproject.com/en/1.8/topics/i18n/timezones/#naive-and-aware-datetime-objects – Charlesthk

0

你可以簡單地做:

@property 
def isNew(self): 
    return (
     datetime.datetime.now() - self.user.date_joined < 
     datetime.timedelta(days=40) 
    ) 

問題在你的代碼是

return False 

爲你的財產的第一行,以便它總是返回false。

而且你不應該在python

+0

剛剛添加的測試和忘記刪除它在我的後 - 對不起 –