Django:访问模型属性

时间:2011-04-24 09:14:20

标签: python django django-models

对于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

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

4 个答案:

答案 0 :(得分:11)

在您的情况下,aboutQuerySet 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的方法

  • 获得
  • ...

http://docs.djangoproject.com/en/dev/ref/models/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>

相关问题