我有两个模型:Publisher和Book。
我正在使用
检索发布商Publisher.objects.filter(name="A").annotate(total_pages=Sum('books__num_pages'))
但我只对2014年写的书籍总页数感兴趣。
我不熟悉在Django中制作SUMIF的任何选项。其他人如何解决这个问题?
我认为应该有可能做一些像
这样的事情Sum('books__num_pages', where={'year': 2014})
或类似的东西。
答案 0 :(得分:1)
books_num_pages = Books.objects.filter(publisher__name='A', year=2014).aggregate(Sum('num_pages'))
答案 1 :(得分:1)
你非常接近实际的正确解决方案(或者也许django在2014年没有它?),Sum
function has a filter
参数,所以你可以这样做:
from django.db.models import Sum, Q
...
Publisher.objects.filter(name="A").annotate(total_pages=Sum('books__num_pages'), filter=Q(year=2014))