【问题标题】:Django: accessing model attributesDjango:访问模型属性
【发布时间】:2011-04-24 09:14: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

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

【问题讨论】:

    标签: python django django-models


    【解决方案1】:

    在您的情况下,aboutQuerySet object,而不是您的模型的实例。试试

    print about[0].title
    

    或者,使用get() to retrieve a single instance of the model:

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

    【讨论】:

    • 我也在问一个幼稚的问题。为什么我们有它像 Model.objects.get() 或 Model.objects.all() 这样的而不是直接 Model.get() 或 Model.all() 我们使用对象实现了什么?
    • @user - 'objects' 是我们所说的“Manager”的名称,它是您与 Django 模型交互的机制。 “对象”是默认名称,但您可以随意覆盖它,或者如果您愿意,也可以编写自己的管理器。文档中有很多关于经理的信息,看看:)
    【解决方案2】:

    Filter 返回一个 QuerySet 而不是您要查找的单个对象。使用 get 代替过滤器。

    返回新查询集的方法

    • 过滤器
    • ...

    不返回查询集的方法

    • 得到
    • ...

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

    【讨论】:

      【解决方案3】:

      正如the documentation 解释的那样,filter 总是 返回一个 QuerySet,它是一个类似列表的项目集合,即使只有一个元素与过滤条件匹配。因此,您可以对列表进行切片以访问您的元素 - about[0] - 或者,更好的是,使用 get() 代替:

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

      【讨论】:

        【解决方案4】:

        如果你只想得到一行

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

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

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

        【讨论】:

          猜你喜欢
          • 2017-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-06
          • 1970-01-01
          • 2014-11-23
          • 1970-01-01
          • 2014-02-16
          相关资源
          最近更新 更多