首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django:如何在多对多关系上聚合/注释?

Django:如何在多对多关系上聚合/注释?
EN

Stack Overflow用户
提问于 2010-09-01 04:44:06
回答 2查看 15.8K关注 0票数 10

我有一个Person模型和一个Tag模型,它们之间有一个m2m。

我需要提取与给定人员查询集中最多记录相关联的标记,以及计数。

有没有一种优雅、高效的方法来使用Django ORM来提取这些内容?

更好的是,有没有一种方法可以通过一些注释获得整个标签分布?如何才能将所有连接到通过m2m连接的对象子集的对象拉出来呢?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-02 12:19:11

这将为您提供最频繁的标记:

代码语言:javascript
复制
from django.db.models import Count
Tag.objects.filter(person__yourcriterahere=whatever [, morecriteria]).annotate(cnt=Count('person')).order_by('-cnt')[0]
票数 7
EN

Stack Overflow用户

发布于 2010-09-01 11:58:34

我需要提取与给定人员查询集中最多记录相关联的标记,以及计数。

我以前也遇到过类似的问题。在我的例子中,在UnitWeapon模型之间定义了m2m关系。我使用以下查询来找出每个Unit使用的武器数量,并按照武器数量的降序对它们进行排序。

代码语言:javascript
复制
from django.db.models import Count
q = Unit.objects.all().annotate(count = Count('weapons')).order_by('-count')

我将根据您的需求调整查询,如下所示:

代码语言:javascript
复制
q = User.objects.all().annotate(count = Count('tag')).order_by('-count')
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3613080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档