我是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
我哪里出错了?为什么我收到这些错误,我该如何解决?
答案 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
它应该有用。