python - Django ORM 中的 SumIf(条件求和)

标签 python django django-models aggregate-functions

我有两个模型:Publisher 和 Book。

我正在检索发布商

Publisher.objects.filter(name="A").annotate(total_pages=Sum('books__num_pages'))

但我只对 2014 年写的书的总页数感兴趣。

我不熟悉在 Django 中创建 SUMIF 的任何选项。其他人是如何解决这个问题的?

我认为应该有可能做类似的事情

Sum('books__num_pages', where={'year': 2014})

或者类似的东西。

最佳答案

您非常接近实际正确的解决方案(或者 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)))

关于python - Django ORM 中的 SumIf(条件求和),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26574762/

相关文章:

python - Python 中的多线程 MD5 校验和

django - Django 中 User.objects.create_user() 与 User.objects.create() 与 User().save() 之间的区别

python - 如何内存 Django 模型对象的昂贵计算?

python - Django1.5 - python2.7 -如何显示和更新具有3个外键的数据库

django - 我们如何在 django 管理搜索字段中搜索多对多字段

python - 如何在pygame中加载图像?

python - 标记重复项同时忽略 pandas 中的空值

python - 使用 pynacl 使用一个文件加密并使用第二个文件解密

python - django.contrib.auth 中的哪个函数创建默认模型权限?

python - 使用 virtualenv 和 pip 的工作流程