对于noobish问题道歉,我对Python和Django都是全新的,并试图制作我的第一个应用程序。
我有一个简单的课程
class About(models.Model):
title = models.CharField(max_length=200)
description = models.TextField()
date = models.DateTimeField('date added')
我添加了一条记录。我可以通过
访问它about = About.objects.filter(id=1)
但是,如果我尝试使用点语法来访问其属性,我会收到以下错误
>>> about.title
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'QuerySet' object has no attribute 'title'
我知道如何在模型中使用unicode来指定更好的返回值,例如
def __unicode__(self):
return self.title
我应该使用它来将模型数据格式化为字典/列表吗?或者我只是完全错过了一些默认行为?
答案 0 :(得分:11)
在您的情况下,about
是QuerySet object,而不是您模型的实例。尝试
print about[0].title
或者,使用get() to retrieve a single instance of the model:
about = About.objects.get(id=1)
print about.title
答案 1 :(得分:2)
Filter返回QuerySet,而不是您要查找的单个对象。使用get而不是filter。
返回新QuerySets的方法
不返回QuerySets的方法
答案 2 :(得分:1)
正如the documentation所解释的那样,filter
总是返回一个QuerySet,它是一个类似列表的项集合,即使只有一个元素与过滤条件匹配。因此,您可以对列表进行切片以访问您的元素 - about[0]
- 或者更好地使用get()
代替:
about = About.objects.get(id=1)
print about.title
答案 3 :(得分:1)
如果你只想获得一行
about = About.objects.get(pk=1)
现在about
是一个对象(一行)
filter
会返回列表,因此要访问列表中的项目,您必须使用index
(约[0])或for loop
。但get
只返回一行。< / p>