首页 > 解决方案 > 在 Django 中注释和 .get()

问题描述

在我的数据库中,我有一张表卡链接到表金额,一张卡可以有很多金额。

因此,使用 django,我尝试获取特定卡并汇总所有链接金额的总和。但不可能将 .get() 和 .annotate 连接在一起。

我试过这个:

    last_year_amount = Card.objects.get(date__date=date(today.year - 1, 
    today.month, today.day)).annotate(total=Sum(Amount.amount))

但它当然会引发错误''Card'对象没有属性'annotate''。我知道 .get() 返回一个对象而不是 QuerySet 所以 .annotate 不作为该对象的方法存在。

但是如何通过注释获得这个对象呢?

感谢您的回答

标签: djangopython-3.xdjango-modelsdjango-views

解决方案


annotate交换和的顺序get

 last_year_amount = Card.objects\
   .annotate(total=Sum('amount'))\
   .get(date__date=date(today.year - 1, today.month, today.day))

您也可以使用filter().

 last_year_amount = Card.objects\
   .filter(date__date=date(today.year - 1, today.month, today.day))\
   .annotate(total=Sum('amount'))\
   .get()

如果查询集不完全包含一项,则不带参数的 finalget()将引发异常。


推荐阅读