Фильтрация QuerySet по __count of RelatedManager
У меня есть QuerySet, который я хотел бы отфильтровать по количеству related_name
, В настоящее время у меня есть что-то вроде этого:
objResults = myObjects.filter(Q(links_by_source__status=ACCEPTED),Q(links_by_source__count=1))
Однако, когда я запускаю это, я получаю следующее сообщение об ошибке:
Cannot resolve keyword 'count' into field
Я предполагаю, что этот запрос работает индивидуально на каждом из links_by_source
связи, поэтому нет count
функция, так как это не QuerySet, с которым я работаю. Есть ли способ фильтрации, чтобы для каждого возвращаемого объекта links_by_source
точно 1?
1 ответ
Вам нужно использовать функцию агрегирования, чтобы получить счетчик, прежде чем вы сможете фильтровать его.
from django.db.models import Count
myObjects.filter(
links_by_source__status=ACCEPTED).annotate(link_count=Count('links_by_source')
).filter(link_count=1)
Обратите внимание, что вам следует обратить внимание на порядок аннотирования и фильтрации здесь: этот запрос подсчитывает количество ПРИНЯТЫХ ссылок, не уверен, хотите ли вы этого или хотите проверить, что общее количество всех ссылок равно 1.