基于 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>
)
我正在使用 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>
)