У меня есть модель Person и модель Tag, с м2м между ними.
Мне нужно извлечь тег, который связан с большинством записей в данном наборе запросов Person, вместе с количеством.
Есть ли элегантный, эффективный способ извлечь это с помощью ORM Django?
Еще лучше, есть ли способ получить полное распределение тегов через некоторую аннотацию? Как можно даже вытащить все объекты, подключенные к подмножеству объектов, подключенных через m2m?
Спасибо!
Это даст вам наиболее часто встречающийся тег:
from django.db.models import Count
Tag.objects.filter(person__yourcriterahere=whatever [, morecriteria]).annotate(cnt=Count('person')).order_by('-cnt')[0]
Мне нужно извлечь тег, связанный с большинством записей в заданном наборе запросов Person, вместе со счетчиком.
Я уже сталкивался с похожей проблемой. В моем случае отношения m2m были определены между моделями Unit
и Weapon
. Я использовал следующий запрос, чтобы узнать количество оружия, используемого каждым Отрядом
, и отсортировать их в порядке убывания количества оружия.
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')