Django:如何访问ForeignKey的模型?

时间:2012-03-03 05:55:20

标签: python 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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我意识到,django本身必须知道ForeignKey字段链接到哪个模型,所以我挖掘了django的源代码并发现这似乎有效:

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