在我的数据库中,我有一个表卡链接到一个表金额,一张卡可以有许多金额。
因此,对于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不会作为这个对象的方法存在。
但是如何使用注解来获取这个对象呢?
感谢您的回答
发布于 2018-08-04 20:26:07
交换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()如果查询集不只包含一项,则不带参数的最终get()将引发异常。
发布于 2018-08-04 20:36:15
我试过了,但有另一个错误。
最后,我在Amount.amount和get格式中遇到了错误。
解决方案是:
last_year_amount = Card.objects.filter(date__date=date(today.year - 1, today.month, today.day)).annotate(total=Sum('amount__amount'))[:1].get()它工作得非常好
发布于 2018-08-04 20:48:17
不如按相反的顺序来:
Amount.objects.filter(card__date__date=date(today.year - 1, today.month, today.day)).values('card').annotate(total=Sum('amount'))我假设Amount模型有一个指向Card模型的外键,字段名为card。
https://stackoverflow.com/questions/51685516
复制相似问题