Django - 无法使时间函数(时区,日期时间)正常工作,获取ErrorName消息:未定义全局名称

Syl*_*ain 2 django timezone datetime django-models

我是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
Run Code Online (Sandbox Code Playgroud)

以下代码来自本教程.我应该成真.

# Make sure our custom method worked.
>>> p = Poll.objects.get(pk=1)
>>> p.was_published_recently()
True
Run Code Online (Sandbox Code Playgroud)

但是当我输入(与教程相同的行)时:

>>> p = Poll.objects.get(pk=1)
>>> p.was_published_recently()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息:

models.py line 12 in was_published_recently
NameError: global name 'datetime' is not defined..
Run Code Online (Sandbox Code Playgroud)

我进口datetimetimezone...我不明白为什么我得到这个错误消息.

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

dsc*_*ulz 5

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

from datetime import timedelta as tdelta
...
def was_published_recently(self):
    return self.pub_date >= timezone.now() - tdelta(days=-1)
Run Code Online (Sandbox Code Playgroud)


小智 5

您需要先从Django utils导入Timezone,然后才需要导入datetime.

from django.db import models
    from django.utils import timezone
    import datetime
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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