模型Django民意调查

时间:2010-05-11 13:29:49

标签: python django django-models

我正在处理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

4 个答案:

答案 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