Застрял на официальном учебнике по Django - PullRequest
3 голосов
/ 28 мая 2009

Я только начал изучать Python, а также начал немного изучать Django. Поэтому я скопировал этот фрагмент кода из учебника:

    # Create your models here.
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_today(self):
        return self.pub_date.date() == datetime.date.today()

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()
    def ___unicode__(self):
        return self.choice   #shouldn't this return the choice

Когда я играю с ним в оболочке, я просто получаю «вопрос» об объекте Опроса, но по какой-то причине он не возвращает «выбор» объектов выбора. Я не вижу разницы. Мой вывод на оболочку выглядит так:

>>> Poll.objects.all()
[<Poll: What is up?>]
>>> Choice.objects.all()
[<Choice: Choice object>, <Choice: Choice object>, <Choice: Choice object>]
>>>

Я ожидал, что объекты Choice вернут что-то еще, кроме "объекта Choice". У кого-нибудь есть идеи о том, где я потерпел неудачу и на что мне обратить внимание?

РЕДАКТИРОВАТЬ: способ заставить меня чувствовать себя идиотом. Да, три подчеркивания были проблемой. Я смотрел на это около часа.

Ответы [ 4 ]

8 голосов
/ 28 мая 2009

У вас есть три подчеркивания перед "unicode__" в классе Choice, должно быть только два, как в вашем классе Poll, например:

def __unicode__(self):
    return u'%s' % self.choice
4 голосов
/ 28 мая 2009

Ваш метод Unicode имеет слишком много подчеркиваний. Следует читать:

def __unicode__(self):
    return u'%s' % self.choice
3 голосов
/ 28 мая 2009

Изменение:

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()
    def ___unicode__(self):
        return self.choice   #shouldn't this return the choice

Кому:

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()
    def __unicode__(self):
        return self.choice   #shouldn't this return the choice

У вас было слишком много подчеркиваний во втором __unicode__ определении

2 голосов
/ 28 мая 2009

Официальная книга Джанго немного устарела. Но комментарии к абзацам действительно полезны. Должно быть два подчеркивания:

___unicode__(self):

должно быть __unicode__(self):

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...