2015-01-21 23 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