如何按Django中另一个表中的事件数进行筛选?

如何按Django中另一个表中的事件数进行筛选?,django,postgresql,django-models,Django,Postgresql,Django Models,以下是我的模型: class Zoo(TimeStampedModel): id = models.AutoField(primary_key=True) class Animal(models.Model): id = models.AutoField(primary_key=True) zoo = models.ForeignKey(Zoo, on_delete=models.PROTECT, related_name='diffbot_results') 我想运

以下是我的模型:

class Zoo(TimeStampedModel):
    id = models.AutoField(primary_key=True)

class Animal(models.Model):
    id = models.AutoField(primary_key=True)
    zoo = models.ForeignKey(Zoo, on_delete=models.PROTECT, related_name='diffbot_results')
我想运行如下查询:

Zoo.objects.filter("WHERE zoo.id IN (select zoo_id from animal_table having count(*) > 10 group by zoo_id)")
一种方法是使用:


理论上,根据,应该可以将queryset传递给正则的.filterid_uIn=,但是queryset必须只选择一列,并且我无法找到一种方法来添加HAVING子句,而不导致queryset选择num_动物列,从而阻止它与u In筛选器表达式一起使用。

btw,sql中有一个错误-HAVING子句必须跟在GROUP BY之后;我在回答中更正了它
>>> 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)>]