Django'dict'对象没有属性

时间:2018-12-24 10:26:52

标签: python django django-views

我正在查询要按月获取的苹果总数。现在,我要检索并打印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},.....>

3 个答案:

答案 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