2015-02-09 57 views
2

我有3個模型,其中2個對應於第一個。現在Django - 用子對象過濾查詢集(ForeignKey)

class Parent(models.Model): 
    name = models.CharField.... 
    ... 

class Child1(models.Model): 
    parent = models.ForeignKey(Parent) 
    ... 

class Child2(models.Model): 
    parent = models.ForeignKey(Parent) 
    ... 

,在我看來,我有2個查詢集過濾Child1Child2對象。

有沒有辦法檢索篩選後的查詢集中的所有Parent對象?

喜歡的東西...

children1 = Child1.objects.filter(blah=blah) 
children2 = Child2.objects.filter(blah=blah) 
parents = Parent.objects.filter(self__in=children1 or self__in=children2) 

注意上面的代碼不工作的話,那就是這個想法。

回答

3

是:

from django.db.models import Q 

children1 = Child1.objects.filter(blah=blah) 
children2 = Child2.objects.filter(blah=blah) 
parents = Parent.objects.filter(Q(child1__in=children1) | Q(child2__in=children2)) 

看到文檔:

+0

我猜Q對象會幫我,但是,是否有必要使用'v alue list'或'value'在children1和children2的查詢集中,以使其工作? – 2015-02-09 19:32:49

+0

不,看第一個鏈接 – Anentropic 2015-02-09 19:33:21

+0

'Q'對象只是必要的,因爲你需要在過濾器中進行'OR'查詢......如果你想要一個'AND'查詢,那麼你可以傳遞多個kwargs到'filter '方法 – Anentropic 2015-02-09 19:35:10