2014-04-09 183 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