Django外键:得到相关模型?

PT1*_*114 15 python django foreign-keys django-models

是否可以通过外键字段本身获取外键的相关模型?

例如,如果我有3个型号:

class ModelA(models.Model)
    field1 = models.CharField(max_length=10)

class ModelB(models.Model)
    field1 = models.CharField(max_length=10)

class ModelC(models.Model)
    field1 = models.CharField(max_length=10)
    field2 = models.ForeignKey(ModelA)
    field3 = models.ForeignKey(ModelB)
Run Code Online (Sandbox Code Playgroud)

我想这样做:

for field in ModelC._meta.fields:
    if field.get_internal_type() == "ForeignKey":
        #get the related model for field e.g. ModelA or ModelB
Run Code Online (Sandbox Code Playgroud)

这可能只使用模型本身而不是模型的实例吗?

jpi*_*pic 25

如果ModelA有一个名为"foo"的FK字段,那么这就是获取相关模型的方法:

ModelA._meta.get_field('foo').rel.to
Run Code Online (Sandbox Code Playgroud)

使用您的代码,它看起来像:

for field in ModelC._meta.fields:
    if field.get_internal_type() == "ForeignKey":
        print field.rel.to
Run Code Online (Sandbox Code Playgroud)

如果很久以前通过在shell中使用tab完成找到它,它仍然有效.您可能想学习使用shell来反向工程.

  • 更新:在新发布的Django 2.0中,看起来"rel"不再是ForeignKey的字段.您可以尝试:`ModelA._meta.get_field('foo').related_model`.我通过在命令行中输入"tab"来自动完成来解决这个问题. (4认同)