Как отфильтровать QuerySet по непустому prefetch_related
В самом prefetch_related используется фильтр:
prefetch_qs = Offer.objects.filter(price__gt=1000)
prefetch = Prefetch('offers', queryset=prefetch_qs)
Моя задача отфильтровать выборку из основной таблицы так, чтобы в нее не попали записи, для которых отфильтрованное поле offers пустое
filtered_qs = Product.objects.annotate(
offers_count=Count('offers')
).filter(
offers_count__gt=0
).prefetch_related(
prefetch
)
В этом случае в аннотации считается количество offers вообще, а не отфильтрованных в preftch_related. Поэтому результат получается неверный. Как отфильтровать выборку правильно?
UPD. Конечно можно продублировать фильтры из Prefetch, но это очень плохой вариант, т.к. фильтров может быть много и это как-то неудобно:
filtered_qs = Product.objects.annotate.filter(
offers__price__gt=1000
).prefetch_related(
prefetch
)