Django调试错误

时间:2010-03-25 05:22:23

标签: python django django-views

我的模型中有以下内容:

 class info(models.Model):
     add = models.CharField(max_length=255)
     name = models.CharField(max_length=255)

当我说时,在观点中               info_l = info.objects.filter(id = 1)               logging.debug(info_l.name)

我收到错误,说调试语句中不存在名称。 'QuerySet'对象没有属性'name' 1.如何解决这个问题。 2.另外如何仅查询一个字段而不是从信息中选择所有类似的选择名称。

1 个答案:

答案 0 :(得分:2)

<强> 1。选择单个项目

看起来你正试图获得一个对象。使用filter将返回QuerySet对象(正如您的代码中所发生的那样),其行为更像列表(并且,正如您所注意到的,缺少name属性)。< / p>

这里有两种选择。首先,你可以抓住第一个元素:

info_l = info.objects.filter(id=1)[0]

您也可以使用objects.get方法,它将返回单个对象(如果不存在则引发异常):

info_l = info.objects.get(id=1)

Django在QuerySets上有一些相当不错的文档,值得看一看:
Docs on using filters
QuerySet reference

<强> 2。检索特定字段

Django提供了deferonly方法,可以让您从数据库中选择特定字段,而不是一次提取所有内容。这些实际上并不会阻止字段被读取;相反,它懒洋洋地加载它们。 defer是一种“选择加入”模式,可让您指定应该延迟加载哪些字段。 only是“out-out” - 你打电话给它,只有你传递的字段才会被急切地加载。

所以在你的例子中,你想要做这样的事情:

info_l = info.objects.filter(id=1).only('name')[0]

虽然使用的模型与您给出的示例一样简单,但我不会担心限制字段。