我正在查询要按月获取的苹果总数。现在,我要检索并打印total_apple
的数据。
fruits= Fruits.objects\
.annotate(month = TruncMonth('sold_date'))\
.values('month')\
.annotate(total_apple=Sum('apple'))\
.order_by('-month')
我尝试了多种打印方法,但是返回了错误。
我尝试过:
1)
total_apple= fruits['total_apple']
print(total_apple)
2)
context['total_apple'] = total_apple
print(context)
返回错误:
No exception message supplied
3)
print(fruits.total_apple)
返回错误:
'QuerySet' object has no attribute 'total_apple'
但是当我尝试print(fruits)
时,它返回了包含我想要的属性的queryset。
<QuerySet [{'month': datetime.date(2018, 10, 1), 'total_apple': 1636}, {'month': datetime.date(2018, 9, 1), 'total_apple': 1658},.....>
答案 0 :(得分:4)
fruits
是一个查询集,而不是Django模型实例。尝试像这样对fruits
查询集建立索引:
fruits[0].total_apple
更新
由于接受的答案中包含.values
,因此fruits[0]['total_apple']
可以代替fruits[0].total_apple
正常工作。 values()
将查询集中的每个对象转换为dict
。
答案 1 :(得分:2)
fruits= Fruits.objects\
.annotate(month = TruncMonth('sold_date'))\
.values('month')\
.annotate(total_apple=Sum('apple'))\
.order_by('-month')
此查询返回对象列表。
因此,您可以遍历fruits
并打印fruit.total_apple
for fruit in fruits:
print(fruit['total_apple'])
fruits
返回QueryDict,因此您需要像total_apple
这样的键来访问它的值
查询下方。
还请注意,如果您想要单个结果,可以像这样查询
fruits= Fruits.objects\
.annotate(month = TruncMonth('sold_date'))\
.values('month')\
.annotate(total_apple=Sum('apple'))\
.order_by('-month').first()
然后print(fruits.total_apple)
答案 2 :(得分:0)
您始终可以使用python shell测试这些想法。该示例清楚地说明了获得所需输出的方法:
>>> from django.contrib.auth.models import User
>>> user = User.objects.all()
>>> user
<QuerySet [<User: bg>, <User: test>]>
>>> user.all()
<QuerySet [<User: bg>, <User: test>]>
>>> user[0]
<User: bg>
>>> user[1].username #this is the way to get theyou need to do
'test'
>>> user[1].password
'pbkdf2_sha256$100000$nJzzPRnFyNvq$MUmPTnzCKJRqxHskU5OpUtFIgMwY5Ap8fPMQMm4fUFQ
根据您的情况,您可以循环打印所有对象的total_apple
for fruit in fruits:
print(fruit.total_apple)
示例:
>>> users = User.objects.all()
>>> for user in users:
... print(user.username)
...
bg
test