Одним из способов является использование необработанного набора запросов :
>>> from testapp.models import Zoo, Animal
>>> z1, z2 = Zoo(), Zoo()
>>> z1.save(), z2.save()
(None, None)
>>> z1_animals = [Animal(zoo=z1) for ii in range(5)]
>>> z2_animals = [Animal(zoo=z2) for ii in range(15)]
>>> x = [a.save() for a in z1_animals+z2_animals]
>>> qs = Zoo.objects.raw("select * from testapp_zoo zoo WHERE zoo.id IN (select zoo_id from testapp_animal group by zoo_id having count(1) > 10)")
>>> list(qs)
[<Zoo: Zoo object (2)>]
Теоретически, для этих документов должна быть возможность передать набор запросов вобычный .filter(id__in=<queryset>)
, но набор запросов должен выбирать только один столбец, и я не могу найти способ добавить предложение HAVING
, не вызывая при этом набор запросов для выбора столбца num_animals, не позволяя использовать его с __in
фильтр выражения.