NameError:未定义全局名称“choice_text”

时间:2013-07-22 13:38:09

标签: python django

我是Django的初学者。以下代码来自Django官方网站上的教程:

from django.db import models
from django.utils import timezone
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_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(default=0)
    def __unicode__(self):
        return self.choice_text

我在python shell中执行以下操作(我已经从之前导入了所有必需的内容):

>>> p = Poll.objects.get(pk=1)
>>> p.choice_set.all()

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/query.py", line 80, in __repr__
    return repr(data)
  File "/usr/local/lib/python2.7/dist-packages/django/db/models/base.py", line 421, in __repr__
    u = six.text_type(self)
  File "/home/sumrok/pydev/mysite/polls/models.py", line 19, in __unicode__
    return self.choice_text
NameError: global name 'choice_text' is not defined

我哪里出错了?为什么我收到这些错误,我该如何解决?

3 个答案:

答案 0 :(得分:4)

您需要重新启动服务器,它正在运行陈旧的字节码。

显示的源代码与异常不匹配(在该行上访问 no 全局名称choice_text,只有属性self.choice_text)。回溯必须在显示异常时使用磁盘中的源代码,如果源代码在此期间发生变化,则字节代码和源代码不同步,错误就不再有意义了。

答案 1 :(得分:2)

我只能想象你导入了所有内容然后对其进行了更改。

内存中的版本仍为return choice_text,而您之后显然添加的self.尚未出现。

解决方案是reload(your_module)

答案 2 :(得分:0)

这是另一种方法:

class Choice(models.Model):
     def __init__(self):
          self.poll = models.ForeignKey(Poll)
          self.choice_text = models.CharField(max_length=200)
          self.votes = models.IntegerField(default=0)
     def __unicode__(self):
          return self.choice_text

它应该有用。