2012-03-03 7 views
1

ForeignKeyの特定モデルのモデルにアクセスする必要があります。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のインスタンスがある場合、それはとても簡単になります。しかし、私はちょうど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フィールドリンクにを知っている必要がありますDjangoのことに気づいたので、私はDjangoのソースコードに掘って、これは作品らしい見つける:

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

@jpicはSO私は2日間で、私自身の答えを受け入れることができることを教えてくれました。 – yegle

+0

素晴らしい、ありがとう、yegle! – jpic

+0

Djangoには、これを実装するためのフレームワークがあります。下の私の答えを見てください。あなたが実装したことは、おそらく内部的に同じことをしますが、私はそれが何が起こっているかについて非常にきれいではないと思います。 – zsquare

関連する問題