我现在正在通过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'>
答案 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