I had a problem with the Django tutorial so I asked a question here.没有人知道答案,但我最终在 Robert 的帮助下找到了答案。 . Python 似乎将 import datetime 视为与 from datetime import * 相同。
工作代码:
import datetime
from django.db import models
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return self.question
def was_published_today(self):
return self.pub_date.date() == date.today()
无效代码:(唯一的区别是导入语句和最后一行。)
from django.db import models
import datetime
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return self.question
def was_published_today(self):
return (self.pub_date() == datetime.date.today())
编辑:我想我还不够清楚。代码产生与最后一行完全相同的回溯 return (self.pub_date.date() == datetime.date.today()) 我最初忘记添加.date() 不是我要问的错误。
无效代码产生的回溯:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/myDir/mySite/polls/models.py", line 11, in was_published_today
return (self.pub_date() == datetime.date.today())
TypeError: 'datetime.datetime' object is not callable
它到底为什么要这样做?
我的问题不是关于忘记.date()。我的问题是:为什么我的命名空间中没有使用 from datetime import * 的 datetime。
注意:第一个问题问的是什么它在做什么。这个问题问的是为什么。
更新:突然间它起作用了。使用 datetime.date.today() AND date.today()。但我的问题仍然存在,为什么 date.today() 有效?似乎日期时间在我的本地 namespace 中,而我没有放在那里。为什么?
请您参考如下方法:
后一个代码段中的问题在于您的这部分代码:
return (self.pub_date() == datetime.date.today())
self.pub_date 包含一个 datetime.datetime 实例。不能那样调用。例如:
>>> import datetime
>>> d = datetime.datetime.now()
>>> d()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'datetime.datetime' object is not callable
>>>
如果你只想比较日期,你应该这样调用它:
return (self.pub_date.date() == datetime.date.today())
