2012-03-03 5 views
1

주어진 모델의 ForeignKey 님의 모델에 액세스해야합니다. 관련 modelA의 인스턴스가 있다면Django : ForeignKey의 모델에 액세스하는 방법?

class modelA(models.db): 
    field1 = models.ForeignKey('modelB') 
class modelB(models.db): 
    pass 
## below is the pseudo code 
modelA.get_model_of_fk('field1').objects.all() # fetch all objects of modelB 

은 물론 너무 쉬운 것입니다 :

다음은 샘플 코드입니다. 그러나 나는 modelA의 인스턴스를 만들지 않고 그것을 할 수있는 방법을 찾을 수 없습니다.

내 현재 솔루션 :

instance_of_a = modelA.objects.all()[0] 
model_b = instance_of_a.field1.__class__ 
model_b.objects.all() # fetch all objects of modelB 

답변

3

Django의 ContentType 프레임 워크는이를 위해 작성되었습니다. 문서 here을 참조 할 수 있습니다. 귀하의 경우에는

from django.contrib.contenttypes.models import ContentType 
model_type = ContentType.objects.get_for_model(modelA.field1) 
model_type.model_class().objects.all() # this will get you all objects of the foreign key model 
0

나는, 그 자체가 어떤 모델 ForeignKey 필드의 링크를 알고 있어야 장고 것을 깨달았다, 그래서 장고의 소스 코드에 파고이 작품 보인다 발견 :

modelA.field1.field.rel.to.objects.all() # same as modelB.objects.all() 
+0

@jpic SO 내가 2 일 내에 내 자신의 대답을 받아 들일 수 있다고 내게 말했다. – yegle

+0

환상적이고 감사합니다 yegle! – jpic

+0

장고에는 이것을 구현하기위한 프레임 워크가 있습니다. 아래 내 대답을 참조하십시오. 당신이 구현 한 것은 아마 내부적으로 똑같은 일을 할 것입니다. 그러나 나는 그것이 무엇이 일어나고 있는지에 관해서는 매우 깨끗하지 않다고 생각합니다. – zsquare

관련 문제