2013-06-29 13 views
12

私はDjangoで作業しています.2つの内部結合を使用してクエリセットを実行する必要があります。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の中の1つのものに戻り、BのすべてがAの中の1つのものに戻ります.Cで何かを持つAの中の何かを持つすべての要素を手に入れようとします。

djangoクエリーセットを使用してこれを行うにはどうすればよいですか?ありがとう。同じ結果/ W

+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. idsにAutoFieldの代わりにIntegerFieldを使用するのはなぜですか?

+0

ありがとう!私は実際にAutoFieldを使用します。私は間違ってコピーしました。 – user1998511