1. 选择单品
看起来您正在尝试获取单个对象。Usingfilter将返回一个QuerySet对象(正如您的代码中发生的那样),它的行为更像一个列表(并且,正如您所注意到的,缺少该name属性)。
您在这里有两个选择。首先,你可以抓住第一个元素:
info_l = info.objects.filter(id=1)[0]
您也可以改用该objects.get方法,该方法将返回单个对象(如果不存在则引发异常):
info_l = info.objects.get(id=1)
Django 有一些关于 QuerySets 的非常好的文档,可能值得一看:
Docs on using filters
QuerySetreference
2. 检索特定字段
Django 提供了deferandonly方法,可以让你从数据库中选择特定的字段,而不是一次获取所有内容。这些实际上并不能阻止读取字段;相反,它会懒惰地加载它们。 defer是一种“选择加入”模式,可让您指定应延迟加载的字段。 only是“out-out”——你称之为,只有你传递的字段才会被热切加载。
所以在你的例子中,你想做这样的事情:
info_l = info.objects.filter(id=1).only('name')[0]
尽管使用像您提供的示例一样简单的模型,但我一点也不担心限制字段。