2011-09-12 9 views
1

私は外部キーによってリンクされ三つのモデルがあります:ジャンゴ:二段階RelatedManager

class One(models.Model): 
    ... 

class Two(models.Model): 
    one = models.ForeignKey(One) 

class Three(models.Model): 
    two = models.ForeignKey(Two) 

をし、私が行うことができます。

one.two_set.all() 

は「ワン」から、関連するすべての「2つの」インスタンスにアクセスしますインスタンス。

'One'インスタンスからすべての 'Three'インスタンスにアクセスするカスタムマネージャを構築するにはどうすればよいですか?そう

create_child_table(instance, manager_name) 

、私はあることを「three_set」マネージャを持つことができるならば、それは大丈夫だと思う:私はインスタンスとその経営者の1を与えられたHTMLテーブルを構築するフレームワークを持っているので、

私はこれを必要としますインスタンスで使用されます。

解決策 私は3から1へのForeignKeyを追加しました。 KISSの哲学を思い出させるあなたの答えに感謝します。

+0

をあなたはone' 'から' two'と 'three'関連のインスタンスの両方にアクセスしたいですか? – Pannu

+0

私は 'one.three_set.all()'のようなものを使用して、関連するすべてのThreeオブジェクトを取得したいとします。 – Don

+0

'one.three_set.all()'フォーマットを使用する特定の理由はありますか? – Pannu

答えて

1

あなたはマネージャーは必要ありません。これはそれを行います:

Three.objects.filter(two__one=one) 
+0

解決策ではありませんが、役に立つヒントです。 – Don

1

reverse relationshipを使用できます。あなたは、あなたのケースtwothreeなどで、関連するモデルの小文字の名前を使用することができます。

one_tow_three = One.objects.all().values('two','two__three')