Модель Джанго Полла - PullRequest
8 голосов
/ 11 мая 2010

Я работаю над учебными пособиями по Django , и сейчас я занимаюсь созданием опроса.

Приведенный ниже код работает нормально, пока я не хочу создавать варианты, где по какой-то причине я всегда получаю это сообщение об ошибке:

line 22, in __unicode__
return self.question

AttributeError: 'Choice' object has no attribute 'question'

Что я делаю не так?

Вот мой код:

import datetime
from django.db import models

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.question # this is line 22

Ответы [ 4 ]

10 голосов
/ 11 мая 2010

Метод __unicode__ на модели Choice должен выглядеть примерно так:

def __unicode__(self):
    return self.poll.question
Атрибут

question не существует в модели Choice, его нужно найти в поле внешнего ключа poll.

Не забудьте проверить замечательную документацию Django, в которой много примеров о том, как обрабатывать отношения «один к одному» .

Редактировать

Вероятно, было бы более разумно использовать return self.choice в методе Choice модель __unicode__, поэтому он выводит фактический выбор, а не вопрос опроса.

def __unicode__(self):
    return self.choice
7 голосов
/ 04 февраля 2011

Чтобы проконтролировать ответ ребуса, в учебнике на самом деле написано, что нужно добавить разные результаты к каждой модели:

class Poll(models.Model):
    # ...
    def __unicode__(self):
        return self.question

class Choice(models.Model):
    # ...
    def __unicode__(self):
        return self.choice

В качестве возврата для обоих использовался «self.question» - я думаю, что вы сделали ту же ошибку копирования / вставки, что и я, или в учебнике ранее была эта ошибка;

4 голосов
/ 11 мая 2010

Должно быть:

def __unicode__(self):
    return self.poll.question

Поскольку опрос представляет собой связанную модель, которая содержит вопрос.

1 голос
/ 21 мая 2013

Это связано с ошибкой человеческого мозга или ошибкой копирования / вставки. Мы / Вы думали, что обе функции одинаковы и вставили один и тот же код для обеих, но в обоих было одно слово.

заменить question на choice в строке 22 * ​​1005 *

...