Django 'dict' 对象没有属性

Yvo*_*nne 1 python django django-views

我正在查询以获取按月的苹果总数。现在我想检索并打印 的数据total_apple

fruits= Fruits.objects\
        .annotate(month = TruncMonth('sold_date'))\
        .values('month')\
        .annotate(total_apple=Sum('apple'))\
        .order_by('-month')
Run Code Online (Sandbox Code Playgroud)

我尝试了很多方法来打印它,但返回了错误。

我试过了:

1)

total_apple= fruits['total_apple']
print(total_apple)
Run Code Online (Sandbox Code Playgroud)

2)

context['total_apple'] = total_apple
print(context)
Run Code Online (Sandbox Code Playgroud)

返回错误: No exception message supplied

3)

print(fruits.total_apple)
Run Code Online (Sandbox Code Playgroud)

返回错误: 'QuerySet' object has no attribute 'total_apple'

但是当我尝试时print(fruits),它返回包含我想要的属性的查询集。

<QuerySet [{'month': datetime.date(2018, 10, 1), 'total_apple': 1636}, {'month': datetime.date(2018, 9, 1), 'total_apple': 1658},.....>
Run Code Online (Sandbox Code Playgroud)

sha*_*fik 5

fruits= Fruits.objects\
        .annotate(month = TruncMonth('sold_date'))\
        .values('month')\
        .annotate(total_apple=Sum('apple'))\
        .order_by('-month')
Run Code Online (Sandbox Code Playgroud)

该查询返回一个对象列表。所以你可以迭代fruits并打印fruit.total_apple

for fruit in fruits:
    print(fruit['total_apple'])
Run Code Online (Sandbox Code Playgroud)

fruits返回 QueryDict,因此您需要通过键访问它的值,例如total_apple

在查询下方。

另请注意,如果您想要单个结果,您可以像这样查询

fruits= Fruits.objects\
            .annotate(month = TruncMonth('sold_date'))\
            .values('month')\
            .annotate(total_apple=Sum('apple'))\
            .order_by('-month').first()
Run Code Online (Sandbox Code Playgroud)

然后print(fruits.total_apple)