python - 基于 child 数量的Django查询集过滤器

标签 python django django-orm django-filter

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

class Foo(models.Model):
    pass

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

我的查询是这样的:

Foo.objects.filter(blah=blah)

我想通过仅提供至少有 5 个通过 FK 连接的 Bar 对象的 Foo 对象来缩小此过滤器。

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

谢谢!

最佳答案

您可以注释 Bar 对象的数量,然后对这些对象进行过滤:

from django.db.models import Count

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

关于python - 基于 child 数量的Django查询集过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62684947/

相关文章:

python - 未实现错误: Django doesn't provide a DB representation

python - 如何使用 Python urlopen 设置 cookie?

python - 在python中获取非字符串值作为json键

python - 每个方面的 Y 轴自动缩放

django - 获取过去30天内每天创建的对象

python - 派生查询上的 Django 内连接

python - 如何处理空列表 - 多页网页抓取

python - 如何防止用户在 Django DetailView 中看到不属于自己的数据?

python - django-tastypie : Related data not saving

python - Django 操作系统错误 : [Errno 13] Permission denied