模型 Django 投票

8 投票
4 回答
4446 浏览
提问于 2025-04-15 22:35

我正在学习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 个回答

4

应该是:

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

因为 poll 是一个相关的模型,它包含了问题。

7

接着rebus的回答,教程实际上是说要给每个模型添加不同的返回值:

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

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

你把'self.question'都当作两个模型的返回值了——我觉得你可能和我一样犯了复制粘贴的错误,或者教程之前就有这个错误;-)

10

Choice模型中的__unicode__方法应该像下面这样:

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

Choice模型上并没有question这个属性,你需要通过poll这个外键字段来获取它。

别忘了查看Django的优秀文档,里面有很多示例,教你如何处理多对一的关系,链接在这里:如何处理多对一关系

编辑

Choice模型的__unicode__方法中,返回self.choice可能更合理,这样它输出的是实际的选择,而不是投票问题。

def __unicode__(self):
    return self.choice

撰写回答