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

将Django QuerySet转换为Python列表遇AttributeError问题求助

解决Django QuerySet导出为Python列表的AttributeError问题

嘿,这个问题我之前也踩过坑!你之所以会碰到AttributeError: 'dict' object has no attribute 'num_avg',核心原因是:当你使用values()方法后,QuerySet里的每个元素都是字典对象,而不是MyModell的模型实例——字典是通过键来取值的,不能用点语法访问属性哦。

修正方案1:改用字典键取值

把列表推导里的.num_avg改成字典索引['num_avg']就能解决:

my_query = MyModell.objects.all().filter(time_stamp__range=('2017-10-01', '2017-10-02')).values('time_stamp').annotate(num_avg=Avg('number')).order_by('time_stamp')
data = [i['num_avg'] for i in my_query]

运行后data就是你想要的[1,2]啦。

更简洁的方案2:使用values_list一步到位

如果你的目标只是获取num_avg的列表,完全可以跳过values(),直接用values_list()配合flat=True参数,代码更简洁高效:

# 直接生成目标列表
data = list(MyModell.objects.all()
            .filter(time_stamp__range=('2017-10-01', '2017-10-02'))
            .annotate(num_avg=Avg('number'))
            .order_by('time_stamp')
            .values_list('num_avg', flat=True))

values_list('num_avg', flat=True)会返回一个包含所有num_avg值的QuerySet,用list()转成普通Python列表就完成了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:15:42