我正在处理Django tutorials,现在我正在创建一个民意调查。
下面的代码运行正常,直到我想创建选项,由于某种原因我总是收到此错误消息:
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
答案 0 :(得分:10)
__unicode__
模型上的Choice
方法应该类似于:
def __unicode__(self):
return self.poll.question
question
模型上不存在 Choice
属性,您需要通过poll
外键字段来覆盖它。
不要忘记查看Django的精彩文档,其中显示了许多示例on how to handle many to one relationships。
修改强>
return self.choice
模型Choice
方法中的__unicode__
可能更有意义,因此它会输出实际选择而非投票问题。
def __unicode__(self):
return self.choice
答案 1 :(得分:7)
为了跟进rebus的答案,教程实际上说要为每个模型添加不同的回报:
class Poll(models.Model):
# ...
def __unicode__(self):
return self.question
class Choice(models.Model):
# ...
def __unicode__(self):
return self.choice
你有'self.question'作为两者的回报 - 我认为你做了同样的复制/粘贴错误,或者教程之前有错误; - )
答案 2 :(得分:4)
应该是:
def __unicode__(self):
return self.poll.question
因为民意调查是包含问题的相关模型。
答案 3 :(得分:1)
这是由于人脑错误或复制/粘贴错误造成的。我们/您认为两个函数都是相同的,并且两者都使用相同的代码进行了复制粘贴,但两者中只有一个字不同。
在第22行将question
替换为choice