Jam*_*een 5 python django aggregate-functions django-models
我有两个模型:Publisher 和 Book。
我正在检索发布商
Publisher.objects.filter(name="A").annotate(total_pages=Sum('books__num_pages'))
Run Code Online (Sandbox Code Playgroud)
但我只对 2014 年所写书籍的总页数感兴趣。
我不熟悉在 Django 中创建 SUMIF 的任何选项。其他人是如何解决这个问题的?
我认为应该有一些可能性做类似的事情
Sum('books__num_pages', where={'year': 2014})
Run Code Online (Sandbox Code Playgroud)
或类似的东西。
您非常接近实际的正确解决方案(或者也许 django 在 2014 年没有它?),Sum函数有一个filter参数,因此您可以执行以下操作:
from django.db.models import Sum, Q
...
Publisher.objects.filter(name="A").annotate(total_pages=Sum('books__num_pages'), filter=Q(year=2014))
Run Code Online (Sandbox Code Playgroud)
books_num_pages = Books.objects.filter(publisher__name='A', year=2014).aggregate(Sum('num_pages'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2144 次 |
| 最近记录: |