我有这个

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()
现在我要过滤 child 整个玩具,其中有名字star
而且我无法决定要应用哪个过滤器
kids.filter(toys_set__icontains='star')

最佳答案

Kid.objects.distinct().filter(toy__name__icontains='star')

请注意distinct()方法。这是必需的,因为kid可以有几个“星形”玩具,因此如果没有distinct(),您将在queryset中获得重复项。

如果要在使用aggregation时按找到的玩具数量过滤 child ,请执行以下操作:
Kid.objects.distinct().filter(toy__name__icontains='star') \
                      .annotate(toys_num=Count('toy')).filter(toys_num__gt=4)

关于django - 如何在Django中基于子项过滤父项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28059987/

10-11 06:20