将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
相关产品推荐
相关产品推荐

