Django:访问模型属性

8 投票
4 回答
36991 浏览
提问于 2025-04-16 16:19

抱歉问了个初学者的问题,我刚接触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
  • ...

http://docs.djangoproject.com/en/dev/ref/models/querysets/

17

在你的情况下,about 是一个 查询集对象,而不是你模型的一个实例。你可以试试:

print about[0].title

另外,你可以使用 get() 方法来获取模型的单个实例

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

撰写回答