Django 条件注解

标签 django django-queryset django-aggregation

我很惊讶这个问题显然还不存在。如果有,请帮我找到它。

我想使用 annotate (Count) 和 order_by,但我不想计算相关对象的每个实例,只计算那些满足特定标准的实例。

也就是说,我可以根据燕子携带的绿色椰子的数量列出它们:

swallow.objects.annotate(num_coconuts=Count('coconuts_carried__husk__color = "green"').order_by('num_coconuts')

最佳答案

这应该是正确的方法。

swallow.objects.filter(
    coconuts_carried__husk__color="green"
).annotate(
    num_coconuts=Count('coconuts_carried')
).order_by('num_coconuts')

请注意,当您筛选相关字段时,在原始 SQL 中,它会转换为 LEFT JOIN 加上 WHERE。最后,注释将作用于结果集,该结果集仅包含从第一个过滤器中选择的相关行。

关于Django 条件注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7001138/

相关文章:

python - Django:只清理特定的模型字段?

python - 通过Django中的相关模型查询

python - 在 Django 中按月分组并检索为 datetime.date()

django - 在 Django Admin 中过滤 ManyToMany 框

Jquery Datetimepicker 到 Python Datetime

django - 查询集的高效周统计

python - 是否可以从 Django 中的 concat 内部获取显示名称?

mysql - 按一行中的相似项目对查询进行分组

django:基于时间范围的聚合查询

Django : Count only non-empty CharField with annotate() & values()