Django:访问模型属性

8

非常抱歉问这样初学者级别的问题,我对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个回答

16

我也有一个天真的问题。 为什么我们要像Model.objects.get()或Model.objects.all()这样使用,而不是直接使用Model.get()或Model.all()? 使用objects能够实现什么? - user
@user - 'objects' 是我们称之为“管理器”的名称,它是您与 Django 模型进行交互的机制。'objects' 是默认名称,但您可以随意覆盖它,或者自己编写管理器,如果需要的话。文档中有关于管理器的大量信息,请查看 :) - thms

2

1
文档所述,filter始终返回一个QuerySet,它是一个类似于列表的集合,即使只有一个元素符合过滤条件。因此,您可以对列表进行切片以访问您的元素-about[0] - 或者更好地使用get()
about = About.objects.get(id=1)
print about.title

1

如果你想获取单独一行

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

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

filter返回列表,所以要访问列表中的项,必须使用index(about [0])或for循环。但get仅返回一行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接