我有一个Person模型和一个Tag模型,它们之间有一个m2m。
我需要提取与给定Person查询集中的大多数记录连接的标记以及计数。
使用Django ORM是否有一种优雅,有效的方法来提取它?
更好的是,有没有办法通过一些注释获得整个标签分发?如何将所有连接到通过m2m连接的对象子集的对象拉出来?
谢谢!
答案 0 :(得分:7)
这会给你最频繁的标签:
from django.db.models import Count
Tag.objects.filter(person__yourcriterahere=whatever [, morecriteria]).annotate(cnt=Count('person')).order_by('-cnt')[0]
答案 1 :(得分:2)
我需要提取连接到给定Person查询集中大多数记录的标记以及计数。
我之前遇到过类似的问题。在我的例子中,m2m关系是在Unit
和Weapon
模型之间定义的。我使用以下查询来查找每个Unit
使用的武器数量,并按武器数量的降序对它们进行排序。
from django.db.models import Count
q = Unit.objects.all().annotate(count = Count('weapons')).order_by('-count')
我会根据您的要求调整查询:
q = User.objects.all().annotate(count = Count('tag')).order_by('-count')