Джанго: как получить доступ к модели ForeignKey? - PullRequest
1 голос
/ 03 марта 2012

Мне нужен доступ к модели 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

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Фреймворк Django ContentType создан для этого.Вы можете сослаться на документы здесь .

В вашем случае

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 голосов
/ 03 марта 2012

Я понял, что сам django должен знать, на какую модель ссылается поле ForeignKey, поэтому я покопался в исходном коде django и обнаружил, что это работает:

modelA.field1.field.rel.to.objects.all() # same as modelB.objects.all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...