django教程 - 返回通用对象而不是我的文本

时间:2014-09-11 21:32:00

标签: python django django-models read-eval-print-loop

我现在正在通过django教程,当我为我的民意调查创建一个选择时,我继续返回通用选项,而不是我输入的文本。

In [19]: q.choice_set.all()
Out[19]: []

In [20]: q.choice_set.create(choice_text='Not much', votes=0)
Out[20]: <Choice: Choice object>

我得到'选择对象'而不是'不太多'

这是我现有的mysite.settings路径代码:

`class Question(models.Model):

quest_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')

def __unicode__(self):
    return self.quest_text

def was_published_recently(self):
    return self.pub_date >= timezone.now()-datetime.timedelta(days=1)

类Choice(models.Model):

question = models.ForeignKey(Question)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)

def __unicode___(self):
    return self.choice_text`

现在即时通讯:

In [17]: Question.objects.all() Out[17]: <repr(<django.db.models.query.QuerySet at 0x10530bbd0>) failed: AttributeError: 'Question' object has no attribute 'unicode'>

2 个答案:

答案 0 :(得分:3)

您正在调用的方法是启动并返回新的Choice对象,而不是新的str实例。所以你在REPL中看到了你应该看到的内容:<Choice: Choice object>是Choice实例的默认表示。

如果您不喜欢默认表示,请实施__unicode____repr__方法(或__str__用于Py3k +):

class Choice(models.Model):
    # ... other stuff you already have here ...

    def __unicode__(self):
        return self.choice_text

    def __repr__(self):
        return self.unicode()

这可能会在本教程的后面部分介绍,所以在这里询问之前完成它是一个好主意。

答案 1 :(得分:3)

由于<Choice: Choice object>不是对象的有用表示,因此您可以为每个模型添加__str__()(或Python __unicode__())方法。

class Question(models.Model):
    #.. Other model stuff you already have 
    def __str__(self):             
        return self.question_text

class Choice(models.Model):
    # ... Other model stuff you already have 
    def __str__(self):              
        return self.choice_text