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シェルで次のことを行っています(以前から必要なものをすべてインポートしました):

>>> 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_textself.choice_text

于 2013-07-22T13:45:12.110 に答える
2

あなたがすべてのものをインポートしてから、それに変更を加えたとしか想像できません。

メモリ内のバージョンはまだreturn choice_textあり、self.明らかに後で追加した はまだ存在しません。

解決策は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 に答える