基于 children 数量的 Django 查询集过滤器

Django queryset filter based on number of children

我正在使用 Django 过滤器来为我的项目做一些过滤。我有以下型号:

class Foo(models.Model):
    pass

class Bar(models.Model):
    foo = models.ForeignKey(Foo, models.CASCADE)

我的查询如下所示:

Foo.objects.filter(blah=blah)

我想缩小这个过滤器的范围,只给我 Foo objects 至少有 5 个 Bar objects 通过 FK 与之相连。

所以如果我有 3 个 Foo objects 分别有 7、5 和 3 个 Bar objects 有它们的 id,那么只有前两个应该在最后的查询集中。我该怎么做才能使评估的查询集在内存中只有前两个 objects?

谢谢!

您可以注释 Bar 个对象的数量,然后筛选这些对象:

from django.db.models import Count

Foo.objects.annotate(
    <b>nbar=Count('bar')</b>
).filter(
    blah=blah,
    <b>nbar__gte=5</b>
)