【问题标题】:How can filter parent based on children in django如何在 django 中根据子级过滤父级
【发布时间】:2015-03-19 13:05:42
【问题描述】:

我有这个

from django.db import models

class Kid(models.Model):
    name = models.CharField(max_length=200)

class Toy(models.Model):
    name = models.CharField(max_length=200)
    owner = models.ForeignKey(Kid)

我有这个查询集

kids = Kid.objects.all()

现在我想过滤孩子的整个玩具,里面有名字star

我无法决定应用哪个过滤器

kids.filter(toys_set__icontains='star')

【问题讨论】:

  • @alecxe 抱歉打错了

标签: django filtering django-queryset


【解决方案1】:
Kid.objects.distinct().filter(toy__name__icontains='star')

注意distinct() 方法。这是必需的,因为孩子可以拥有多个“明星”玩具,因此如果没有 distinct(),您将在查询集中得到重复项。

如果您想在使用aggregation时按找到的玩具数量过滤孩子:

Kid.objects.distinct().filter(toy__name__icontains='star') \
                      .annotate(toys_num=Count('toy')).filter(toys_num__gt=4)

【讨论】:

  • 但是 Kid 没有任何玩具领域。不是toy_set
  • @感谢您消除我的疑问。我如何查询孩​​子有超过 4 个玩具的地方
猜你喜欢
  • 1970-01-01
  • 2018-04-11
  • 1970-01-01
  • 2018-10-10
  • 2016-12-22
  • 2020-01-14
  • 2017-04-20
  • 2019-07-31
  • 2017-12-08
相关资源
最近更新 更多