2012-03-03 5 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 создана для этого. Вы можете обратиться к документам 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

Django имеет рамки для реализации этого. См. Мой ответ ниже. То, что вы реализовали, возможно, делает то же самое внутри, но я думаю, что он не очень чист относительно того, что происходит. – zsquare

Смежные вопросы