2011-04-24 100 views
4

对于noobish问题的道歉,我对Python和Django都很陌生,并试图制作我的第一个应用程序。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 

我应该使用它来将模型数据格式化为字典/列表吗?或者我完全缺少一些默认行为?

回答

1

由于the documentation解释,filter总是返回一个QuerySet,这是项目的列表类似的集合,即使只有一个元素过滤条件相匹配。所以,你可以切片列表来访问你的元素 - about[0] - 或者更好,使用get()代替:

about = About.objects.get(id=1) 
print about.title 
1

如果你想要得到的只是一排

about = About.objects.get(pk=1) 

现在about是一个对象(一行)

filter返回列表,因此要访问列表中的项目,您必须使用index(约[0])或for loop。但get只返回一行。