2017-08-05 11 views
0

だが、私はこのような1対多の関係に束縛三つのモデルを持っているとしましょう:第2レベルの1対多リレーションシップ階層ですべての関連オブジェクトを取得する方法は?

class Highest(Model): 
    pass 


class Medium(Model): 
    higher = ForeignKey(Highest, on_delete=CASCADE) 


class Lowest(Model): 
    higher = ForeignKey(Medium, on_delete_CASCADE) 

私はhighestと呼ばれるHighestのインスタンスを持っている場合今、私は簡単にこのようすべての関連Mediumオブジェクトを取得することができます。highest.medium_set.all()

そして、私はmediumと呼ばれるMediumのインスタンスを持っている場合、私は簡単にこの方法ですべての関連Lowestオブジェクトを取得することができます。medium.lowest_set.all()

しかし、どのように、私はobtaかを特定のHighestオブジェクトに関連するMediumオブジェクトに関連するすべてのLowestオブジェクトでは、

これは動作しません:highest.medium_set.lowest_set.all()

私はいつもこれを行うことができます:Lowest.objects.filter(higher__higher=highest).distinct().all()

をしかし、これが唯一の方法ですか?それとももっと簡単にすることができますか?つまり、すべてのLowestオブジェクトをフィルタリングするのではなく、Highestオブジェクトからすべての関連するLowestオブジェクトを取得することによって、

+2

。簡単に言えば、取得したいモデル、つまり最低から始めましょう。 –

答えて

0

highest.medium_set.lowest_set.all()を実行しようとすると、クエリーセット自体でクエリセットメソッドを呼び出そうとしています。関連するすべての最下位オブジェクトを取得するメディアインスタンスが不明なため、これは機能しません。

これは問題ないはず:

* *最も簡単な方法です
Lowest.objects.filter(higher__higher=highest) 
関連する問題