django聚合聚合字段?

标签 django aggregation

我有一个名为 Item 的模型,与 User(“所有者”)具有 m2m 关系。

对于每个项目,我需要计算拥有它的用户数量。使用 annotate()

就可以轻松实现这一点

但是我需要计算每个项目的特定性别所有者与所有者总数之间的比率。例如,如果 5 位用户中有 2 位男性拥有该商品,则比例为 0.4

最好的方法是什么?

最佳答案

要使用 ORM 执行此操作,您需要条件聚合,而 Django 不支持条件聚合。 http://www.voteruniverse.com/Members/jlantz/blog/conditional-aggregates-in-django提出了一个可能有效的 hacky 解决方案。

如果不需要按比率排序,则可以调用两次 annotate,然后在 Python 中计算比率。像这样的东西:

items = Item.objects.annotate(ucount=Count('users')).annotate(ccount=CountIf(<condition>))
for item in items:
    item.ratio = item.ucount / item.ccount

如果您不想这样做,我建议您使用 extra() 方法和一些自定义 sql 来获取您想要的额外信息。该方法的文档位于 Django Queryset API 文档页面。

关于django聚合聚合字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1803262/

相关文章:

javascript - 如何计算 MongoDB 中的实例数

c# - ElasticSearch (Nest) 中的聚合

php - 如何在Elasticsearch 6.x中按动态或未知字段进行聚合

algorithm - 如何优化大列表聚合

Django 1.6 按小时和时区过滤问题

elasticsearch - 编写Elasticsearch 2.1脚本没有这样的属性:doc

静态 Assets 上的 Django CORS

mysql - Django 存储数百万产品价格历史的最佳方式?

python - git merge 与我们的数据库文件冲突(多个开发人员)

django - 在 django-tenant-schemas 中使用 PUBLIC_SCHEMA_URLCONF