如何根据django中的子项过滤父级

use*_*546 8 django filtering django-queryset

我有这个

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)
Run Code Online (Sandbox Code Playgroud)

我有这个查询集

kids = Kid.objects.all()

现在我想筛选孩子整个玩具有名字star在它

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

kids.filter(toys_set__icontains='star')

cat*_*ran 10

Kid.objects.distinct().filter(toy__name__icontains='star')
Run Code Online (Sandbox Code Playgroud)

注意distinct()方法.这是必需的,因为孩子可以有几个"明星"玩具,所以没有distinct()你会在查询集中得到重复.

如果您想在使用聚合时按照发现玩具的数量过滤孩子:

Kid.objects.distinct().filter(toy__name__icontains='star') \
                      .annotate(toys_num=Count('toy')).filter(toys_num__gt=4)
Run Code Online (Sandbox Code Playgroud)