0

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

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

4

3 回答 3

4

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

显示的源代码与异常不匹配(在该行上没有访问全局名称choice_text,只有一个属性self.choice_text)。Tracebacks 在显示异常时必须使用磁盘中的源代码,如果同时源代码发生更改,则字节码和源代码不同步并且错误不再有意义。

于 2013-07-22T13:45:12.110 回答
2

我只能想象您导入了整个内容,然后对其进行了更改。

内存中的版本仍然存在return choice_textself.而您稍后显然添加的 尚未存在。

解决方案是reload(your_module).

于 2013-07-22T13:44:44.220 回答
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

它应该工作。

于 2013-07-22T14:12:34.717 回答