如何在 django 中根据子级过滤父级
Posted
技术标签:
【中文标题】如何在 django 中根据子级过滤父级【英文标题】:How can filter parent based on children in 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 抱歉打错了 【参考方案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 个玩具的地方以上是关于如何在 django 中根据子级过滤父级的主要内容,如果未能解决你的问题,请参考以下文章