A .count()
оценивается с нетерпением в Django, поэтому Django попытается оценить flights.filter(zones__pk=F('pk')).distinct().count()
, и преуспеет в этом, поскольку F('pk')
будет подсчитывать число fligts
там, гдеzones
имеют тот же первичный ключ, что и первичный ключ Flight
.Вам нужно будет использовать OuterRef
[Django-doc] и .annotate(..)
в подзапросе.
Но вы делаете это слишком сложным.Вы можете просто комментировать:
from django.db.models import Q, Sum
Zone.objects.annotate(
<b>count=Count('flight', distinct=True, filter=Q(flight__…))</b>
)
Здесь filter=Q(flight__…)
является частью фильтра ваших рейсов.Таким образом, если Flight
s фильтруются по гипотетическому active=True
, вы фильтруете с помощью:
Zone.objects.annotate(
count=Count('flight', distinct=True, filter=<b>Q(flight__active=True)</b>)
)