2011-09-12 2 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() 

은 '하나'에서 모든 관련 '두'인스턴스에 액세스 할 예.

'하나의'인스턴스에서 모든 '3'인스턴스에 액세스 할 수있는 맞춤 관리자를 만들려면 어떻게해야합니까? 그래서

create_child_table(instance, manager_name) 

, 나는이 될 수있는 'three_set'매니저를 가질 수 있다면 괜찮을 것 : 나는 인스턴스와 관리자 중 하나를 제공하는 HTML 테이블을 구축하는 프레임 워크를 가지고 있기 때문에

나는이 필요 인스턴스에서 사용됩니다.

솔루션 3에서 1로 ForeignKey를 추가하여 작업을 마쳤습니다. KISS 철학을 상기시켜 준 답변 덕분에.

+0

당신이 one''에서 모두'two'와'three' 관련 인스턴스에 액세스하려면? – Pannu

+0

'one.three_set.all()'과 관련된 모든 세 개의 객체를 얻고 싶습니다. – 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')