2013-06-29 41 views
12

我正在使用Django,並且需要使用兩個內部聯接來執行查詢集。Django Inner Join Queryset

我有三種型號A,B,C和我想要做像PSQL下面的查詢:

select DISTINCT a from A inner join B on B.a_id = A.id inner join C on C.b_id = B.id;

型號:(僅包括相關字段)

class A(models.Model): 
    id = models.IntegerField(primary_key=True) 

class B(models.Model): 
    id = models.IntegerField(primary_key=True) 
    a = models.ForeignKey(A, null=True, blank=True,on_delete=models.SET_NULL) 

class C(models.Model): 
    b = models.ForeignKey(B, null=True, on_delete=models.SET_NULL) 

因此,C中的所有內容都鏈接回B中的一件事物,而B中的所有內容都鏈接回A中的一件事物。我想嘗試獲取A中具有C中所有內容的所有不同元素。

如何使用django queryset執行此操作?謝謝。

+0

這將是偉大的,如果你展示你的模型,並告訴你想要完成 – karthikr

+0

@karthikr增加了模型,我想要做什麼 – user1998511

回答

24

A.objects.filter(b__c__isnull=False)結果的SQL瓦特/相同的結果:

SELECT DISTINCT a.* FROM a INNER JOIN b ON (a.id = b.a_id) INNER JOIN c ON (b.id=c.b_id) 
WHERE c.id IS NOT NULL; 

P.S.爲什麼您使用IntegerField而不是AutoField作爲ID?

+0

真棒,謝謝!我實際上使用AutoField,我只是把它複製錯了。 – user1998511