2010-05-11 13 views
8

나는 Django tutorials을 통해 작업 중이며 지금은 설문 조사를 작성 중입니다. 내가 선택을 만들 때까지모델 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 

답변

10

Choice 모델에 __unicode__ 방법과 같이 보일 것입니다 :

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

question 속성이 Choice 모델에 존재하지 않습니다, 당신은 poll 외래 키 필드 위에 그것을 위해 도달해야합니다.

on how to handle many to one relationships 예제를 많이 보여주는 Django의 훌륭한 문서를 확인하십시오.

는 실제 선택이 아니라 설문 조사 질문을 출력 그래서 아마 Choice 모델 __unicode__ 방법 return self.choice 더 나을

편집.

def __unicode__(self): 
    return self.choice 
+0

라인 (22)에 choicequestion을 대체 나는 그것을했고, 지금은 이러한 응답을 얻을 Poll.objects.get (pk = 1) >>> p = Poll.objects.get (pk = 1) >>> p.choice_set.all() [<선택 사항 : 무슨 일인가?>, <선택 : What 's up?>] >>> p.choice_set.create (선택 = '많지 않음', 득표 = 0) <선택 : What 's up?> >>> 선택 사항을 설정하지 않았으므로 처음에는 선택 사항이 없어야합니다. 문서 링크를 제공해 주셔서 감사합니다. 확인해 보겠습니다. – MacPython

+0

사실, 출력을 위해'return self.poll.question'과 같은 것을 사용하는 것이 어리석은 것 같아요.'return self.choice'를 시도하십시오. –

+0

답해 주셔서 감사합니다! 나는 main_page가 지금 나타나지 않을 것이기 때문에 return.self.choice가 해결책 인 지 확실히 말할 수 없다. 그래서 나는 그것을 풀어서이 질문을 지금 닫아야 만합니다. 다시 한 번 감사드립니다! 이것은 지금까지 내가 만난 최고의 사이트입니다. 정말 도움이되었습니다! – MacPython

4

그것은해야한다 :

여기 내 코드의 여론 조사 질문이 포함 된 관련 모델

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

때문입니다.

7

이 수수께끼의 대답에 후속, 튜토리얼 실제로 각 모델에 다른 수익을 추가 할 수 말한다 :

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

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

당신은 모두의 반환 등 'self.question'을했다 - 내가 생각하고 당신이했던 것과 같은 복사/붙여 넣기 오류를 만들었거나 튜토리얼에 그 오류가있었습니다 ;-)

+1

실제로 이것은 자습서를 기반으로 한 "올바른"대답입니다. 선택 인스턴스를 인쇄 할 때 설문 조사의 질문 텍스트를 반환하려는 이유가 확실하지 않습니다. – threejeez

1

이것은 인간의 두뇌 오류 또는 복사/붙여 넣기 오류가 원인입니다. 우리는 두 기능이 동일하고 두 코드 모두 동일한 코드를 복사한다고 생각했지만 두 언어 모두 다른 단어가있었습니다. [] >>> 가) >>> Poll.objects.all을 (:

관련 문제