【问题标题】:can't compare datetime.datetime to builtin_function_or_method [closed]无法将 datetime.datetime 与 builtin_function_or_method 进行比较 [关闭]
【发布时间】:2016-02-05 01:10:56
【问题描述】:

我是 Django 的新手。

我创建了 Sponsor 模型,该模型具有 start_date(开始日期成为赞助商)和 end_date(赞助商结束日期)。

start_date = models.DateField(
        _("Start date"),
        default=datetime.date.today)

end_date = models.DateField(
        _("End date"),
        default=datetime.date.today)

我想将所有逻辑放入模型中,如果不可能,那么我想将逻辑放入视图中。我创建了可以返回 True 或 False 的方法 current_sponsor(如果今天在 start_date 和 end_date 的范围内,则表示 True 否则 False)。

这是我的current_sponsor 方法

def current_sponsor(self):
        today = datetime.date.today
        if today >= self.start_date:
            return True
        elif today <= self.end_date:
            return True
        else:
            return False

问题是我收到错误can't compare datetime.datetime to builtin_function_or_method

我尝试使用 django shell 查看数据,它似乎可以工作,但实际上并不起作用。

【问题讨论】:

  • ...你缺少括号。
  • @rischan 无意冒犯,但真正开始阅读异常消息会真正让您受益...它们再清楚不过了,但如果不是一个简单的搜索就可以了;你得到的这些错误已经被问了一百万次了。

标签: python django datetime


【解决方案1】:

datetime.date.today 没有调用你认为的函数:

>>> import datetime
>>> datetime.date.today
<built-in method today of type object at 0x7fb681a90f80>  # NOT CALLING FUNCTION

>>> datetime.date.today()  # You need () at the end
datetime.date(2015, 11, 4) 

如果你加上括号,你会得到你期望的结果。

【讨论】:

  • 谢谢@jonrshape 现在我意识到我错过了括号,但是当我放括号时我仍然收到错误can't compare datetime.datetime to datetime.date
  • 正如例外所说,您要比较的日期之一是datetime.datetime 对象,一个是datetime.date 对象。见this answer
  • 我把所有东西都改成了today = datetime.datetime.today(),现在我得到了不同的错误can't compare offset-naive and offset-aware datetimes
  • @rischan 这是 Django 的“功能”。我假设您使用的是 Django 1.4...检查this link,它讨论了您的确切问题。
  • 感谢 Tgsmith61591 因为 UTC。我已将其替换为 replace(tzinfo=utc): 并且可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多