6

我是 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

以下代码来自教程。我应该得到真实的。

# 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..

我导入datetimetimezone......我不明白为什么我会收到该错误消息。

任何帮助将不胜感激!:-)

4

9 回答 9

9

您需要先从 Django utils 导入 Timezone,然后再导入 datetime。

from django.db import models
    from django.utils import timezone
    import datetime
于 2015-02-10T19:09:34.347 回答
5

在测试教程(第 5 部分)中,我们处理polls/tests.py文件。但是,当您运行测试时,错误会抱怨polls/models.py文件。此文件在测试教程中未提及,但您可以在错误消息中看到它。

添加from django.utils import timezonepolls/models.py并再次尝试测试。

于 2016-03-06T01:09:53.743 回答
4

无法重现该问题,您的代码对我有用。你可以尝试这样的事情:

from datetime import timedelta as tdelta
...
def was_published_recently(self):
    return self.pub_date >= timezone.now() - tdelta(days=-1)
于 2013-02-06T02:52:59.190 回答
3

如果您的问题是关于编写您的第一个 Django 应用程序,第 5 部分,您应该添加这两行

import datetime
from django.utils import timezone
于 2018-12-21T17:42:41.543 回答
2

只是为了澄清,这是我需要在 polls/models.py 文件顶部添加的内容:

import datetime
from django.utils import timezone
于 2014-06-22T01:17:55.830 回答
0

我知道这是一个较旧的线程。我有同样的问题,因为我忘了添加这一行: from django.utils import timezone

于 2013-10-20T14:26:34.647 回答
0

关于该错误消息,请注意 Django 文档所说的内容:

如果您遇到查询日期或时间的异常,请在提交错误之前尝试安装它。>这很简单:

$ sudo pip install pytz

一旦你安装了这个包,问题就会神奇地消失!

于 2015-01-10T16:57:20.827 回答
0

我尝试了所有方法,但问题仍然没有得到解决。最后,当我也以与 shell 中其他人提到的相同顺序导入时,测试成功了。

我最后不得不导入日期时间,然后它才开始工作。

于 2019-08-27T13:27:38.580 回答
0

我遇到了同样的问题。

我发现添加导入后必须重新打开 Python shell,timezone以便应用更改。之后它对我有用。

于 2021-12-08T13:47:06.347 回答