2012-10-21 28 views
0

使用django,我試圖從另一個QuerySet獲取FK關係的QuerySet。從給定的查詢集獲取FK集

也就是說,給定像這樣的關係: ParentTable (ParentID)ChildTable(ChildID, ParentID

我有一個特定的查詢集 children = Child.objects.filter(**some_filters) ,我需要一個QuerySet爲Parent對象 「引用」 的children查詢集。

我最初的想法是隻使用,就像這樣: Parent.objects.filter(id__in=child.only('parent')),但檢查SQL查詢顯示,讓沿ParentID IN (SELECT subq.ChildID FROM ...這顯然產生意外的結果行WHERE子句。 (唯一的方法檢查表明我這裏使用的是不正確,所以這種行爲是正常的)

ParentID IN (SELECT subq.ParentID FROM ...

+0

'Parent.objects.filter(child__in =兒童)'似乎工作,但我不知道是什麼原因。 – DanielB

回答

1

那麼你已經回答了你的問題所需的查詢會是這樣:

考慮這一點,創建時然後,Django自動爲你創建一個反向引用,這就是爲什麼你能夠基於子進行結果篩選的原因。此外,如果您想遵守此行爲,則可以在模型字段中使用Symmetrical = False kwargs來不生成反向關係。

class Parent(models.Model): 
... 

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

您可以隨時進行查詢:

Parent.objects.filter(child__in = Childrens.objects.all())