2015-01-21 21 views
6

我有这个如何过滤基于儿童父母在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()

现在我想筛选孩子整个玩具在它

有名字 star

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

kids.filter(toys_set__icontains='star')

+0

@alecxe对不起,这是错字 – user3214546 2015-01-21 05:12:47

回答

7
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) 
+0

,但孩子没有任何玩具领域。是不是'toy_set' – user3214546 2015-01-21 05:13:49

+0

阅读“反向”关系的文档:https://docs.djangoproject.com/en/1.7/topics/db/queries/#lookups-that-span-relationships – catavaran 2015-01-21 05:19:39

+0

@感谢您的清除我的怀疑。我如何查询哪里的孩子有4个以上的玩具 – user3214546 2015-01-21 05:21:46