2014-04-09 178 views
0

我正在嘗試並不困難,但它確實無法正常工作。我看不到錯誤在哪裏。在我的抽象用戶模型中,我有一個is_donator方法,它不起作用。Django日期時間問題

@property 
def is_donator(self): 
    if(self.donator >= datetime.now()): 
     return True 
    else: 
     return False  

某些原因,它只是不會返回任何東西,但對我而言,這一切都看起來不錯,但任何想法?

+0

你怎麼稱呼它?你確定'self.donator'是一個日期時間對象嗎? – msvalkon

+0

我從模板中調用它並且這是我的捐贈者聲明:donator \t = models.DateTimeField(auto_now = True) – Callum

+2

這不是總是失敗,因爲他們可能成爲過去的捐助者嗎? – Andy

回答

0

你有兩個相關的問題。首先是你使用了錯誤的比較。

if(self.donator >= datetime.now()): 

這意味着捐獻者必須在未來某個時候成爲捐獻者。

將其更改爲

if(self.donator <= datetime.now()): 

這將確保他們成爲過去的獻血者。

你擁有的另一個問題是,你正在使用auto_now

每次對象保存時間自動設置現場到現在。 用於「上次修改」的時間戳。請注意,當前日期始終使用爲 ;這不僅是您可以覆蓋的默認值。

然後,這與您的第一個問題有關。每次更新用戶字段時 - 如果您沒有明確設置字段 - 則默認爲現在。

根據意見更新:這是檢查您的捐助者是否不爲空,並確保它存在。如果它不存在,則由您決定您的邏輯,但如果它不存在,則您的用戶不是捐贈者。您可以在except區塊中使用return False。這個塊非常冗長,但它明確地告訴你發生了什麼。

def is_donator(self): 
    try: 
     if self.donator:  # This is checking that self.donator is not null 
      if(self.donator >= datetime.now()): 
       return True 
      else: 
       return False 
     else: 
      # return false? # This runs if self.donator is null 
    except NameError: 
     # do something (or just 'pass', because your self.donator value doesn't exist) 
+0

我應該刪除auto_now並將其更改爲auto_add?我只是不想要一個不爲空的錯誤。此外,捐助者的日期應該是在將來,日期是他們是捐贈者的日期。我嘗試刪除auto_now,但它也沒有工作 – Callum

+0

那麼這只是一個過去的日期,這是我能想到讓他們成爲一個月的捐贈者的最簡單的方法 – Callum

+0

@CallumBonnyman,這似乎誤導了你因爲當你不可避免地需要知道一個。)當有人不再是捐獻者或b)知道誰從來不是捐贈者。你收到什麼'不爲空'的錯誤?如果一個變量被定義或不爲零,有pythonic方法來處理 – Andy