You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django使用values()获取QuerySet后迭代取值报AttributeError如何解决

错误原因

Django ORM的values()方法返回的QuerySet中每个元素是字典类型,并非模型类的实例对象,所以不支持.属性名的访问方式,只能通过字典键来取值。

正确实现方案

方案1:直接按字典键取值

适合已经用了values()的场景,直接用中括号加键名访问即可:

vmware = Vmware.objects.values('pk', 'hostname')
for i in vmware:
    # 字典通过[key]方式取值
    print(i['pk'], i['hostname'])

方案2:改用values_list+命名元组实现点属性访问

如果更习惯用.属性名的写法,可以把values()换成values_list(),加上named=True参数返回命名元组:

# named=True会返回带字段名的命名元组,支持点访问
vmware = Vmware.objects.values_list('pk', 'hostname', named=True)
for i in vmware:
    print(i.pk, i.hostname)

方案3:查询模型实例(适合需要用到模型其他方法/属性的场景)

如果后续需要用到该模型的自定义方法或者其他未查询的字段,可以用only()方法指定仅查询需要的字段,返回模型实例:

# only()会只拉取指定字段,返回模型实例,支持点属性访问
vmware = Vmware.objects.only('pk', 'hostname')
for i in vmware:
    print(i.pk, i.hostname)

内容的提问来源于stack exchange,提问作者Lolm_47

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 17:54:00