Django:访问模型属性
抱歉问了个初学者的问题,我刚接触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
我应该用这个来把模型数据格式化成字典或列表吗?还是说我完全忽略了一些默认的行为?
4 个回答
1
正如文档所解释的,filter
总是返回一个查询集(QuerySet),这就像一个列表,里面可以有多个项目,即使只有一个项目符合过滤条件。所以你可以像切片列表一样来访问你的元素,比如用about[0]
,或者更好的方法是直接使用get()
:
about = About.objects.get(id=1)
print about.title
2
filter 方法返回的是一个查询集,而不是你想要的单个对象。你应该用 get 方法来代替 filter。
返回新查询集的方法
- filter
- ...
不返回查询集的方法
- get
- ...
17
在你的情况下,about
是一个 查询集对象,而不是你模型的一个实例。你可以试试:
print about[0].title
另外,你可以使用 get() 方法来获取模型的单个实例:
about = About.objects.get(id=1)
print about.title