如何在 Django 中基于 children 过滤 parent
How can filter parent based on children in django
我有这个
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()
现在我想过滤 kids whole toys have name star
in it
我无法决定应用哪个过滤器
kids.filter(toys_set__icontains='star')
Kid.objects.distinct().filter(toy__name__icontains='star')
注意 distinct()
方法。这是必需的,因为孩子可以有多个 "star" 玩具,所以如果没有 distinct()
,您将在查询集中得到重复项。
如果您想在使用时按找到的玩具数量过滤孩子 aggregation:
Kid.objects.distinct().filter(toy__name__icontains='star') \
.annotate(toys_num=Count('toy')).filter(toys_num__gt=4)
我有这个
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()
现在我想过滤 kids whole toys have name star
in it
我无法决定应用哪个过滤器
kids.filter(toys_set__icontains='star')
Kid.objects.distinct().filter(toy__name__icontains='star')
注意 distinct()
方法。这是必需的,因为孩子可以有多个 "star" 玩具,所以如果没有 distinct()
,您将在查询集中得到重复项。
如果您想在使用时按找到的玩具数量过滤孩子 aggregation:
Kid.objects.distinct().filter(toy__name__icontains='star') \
.annotate(toys_num=Count('toy')).filter(toys_num__gt=4)