我是 Django 新手,
我正在学习教程,我必须创建两个模型,如下所示:
import datetime
from django.db import models
from django.utils import timezone
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_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField()
def __unicode__(self):
return self.choice_text
以下代码来自教程。我应该得到True。
# Make sure our custom method worked.
>>> p = Poll.objects.get(pk=1)
>>> p.was_published_recently()
True
但是当我输入(与教程相同的行)时:
>>> p = Poll.objects.get(pk=1)
>>> p.was_published_recently()
我收到以下错误消息:
models.py line 12 in was_published_recently
NameError: global name 'datetime' is not defined..
我导入了
datetime
和 timezone
...我不明白为什么会收到该错误消息。
任何帮助将不胜感激! :-)
您需要先导入时区
from Django utils
,然后您需要import datetime
from django.db import models
from django.utils import timezone
import datetime
无法重现问题,您的代码对我有用。 你可以尝试这样的事情:
from datetime import timedelta as tdelta
...
def was_published_recently(self):
return self.pub_date >= timezone.now() - tdelta(days=-1)
在测试教程(第 5 部分)中,我们处理 polls/tests.py 文件。 但是,当您运行测试时,错误会抱怨 polls/models.py 文件。 测试教程中未提及此文件,但您可以在错误消息中看到它。
将
from django.utils import timezone
添加到 polls/models.py 并再次尝试测试。
如果您的问题是关于 编写您的第一个 Django 应用程序,第 5 部分,您应该添加这两行
import datetime
from django.utils import timezone
为了澄清,这是我需要在 polls/models.py 文件顶部添加的内容:
import datetime
from django.utils import timezone
我知道这是一个较旧的线程。 我遇到了同样的问题,因为我忘记添加这一行: 从 django.utils 导入时区
关于该错误消息,请注意 Django 文档的内容:
如果您在查询日期或时间时遇到异常,请在提交错误之前尝试安装它。 >就这么简单:
$ sudo pip install pytz
一旦安装了该软件包,问题就会神奇地消失!
我尝试了所有方法,但问题仍然没有得到解决。最后,当我也按照 shell 中其他人提到的相同顺序导入时,测试成功了。
我最后不得不导入日期时间,只有在那之后它才开始工作。
我也遇到同样的问题。
我发现在添加
timezone
的导入后必须重新打开 Python shell,以便应用更改。之后它对我有用。