本文介绍了如何在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)
我有此查询集
孩子= Kid.objects.all()
现在我想过滤整个孩子玩具中的名称为 star
Now i want to filter kids whole toys has name star
in it
,但我无法决定要应用哪个过滤器
and i am not able to decide which filter to apply
kids.filter(toys_set__icontains ='star')
推荐答案
Kid.objects.distinct().filter(toy__name__icontains='star')
请注意 distinct()
方法。这是必需的,因为孩子可以有几个明星玩具,因此如果没有 distinct()
,您将在查询集中获得重复项。
Note the distinct()
method. It is required because kid can have several "star" toys so without distinct()
you will get duplicates in the queryset.
如果您要在使用:
Kid.objects.distinct().filter(toy__name__icontains='star') \
.annotate(toys_num=Count('toy')).filter(toys_num__gt=4)
这篇关于如何在Django中基于子项过滤父项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!