在Django 2中动态获取ForeignKey模型

时间:2019-03-13 11:04:54

标签: django model

目前,我正在尝试动态确定ForeignKey背后的模型。例如,我有:

class Calendar(models.Model):
date = models.DateField()
shift= models.ForeignKey(Workshift, on_delete=models.CASCADE, null=True, blank=True)

class Workshift(models.Model):
    shift = models.CharField(max_length=20)

现在,我想做一些类似Calendar._meta.get_foreign_key_models()的事情(原因不存在),并接收工作班次模型。我已经尝试过model._meta.get_fields()方法,但这只告诉我,该移位是一个ForeignKey,而不是其背后的模型。 这有可能吗?

2 个答案:

答案 0 :(得分:1)

字段本身具有属性related_model,因此,如果您获取字段,请检查哪些字段是RelatedField的实例,则可以获取related_model

from django.db.models.fields.related import RelatedField
related_models = [field.related_model for field in Calendar._meta.get_fields() if isinstance(field, RelatedField)]

答案 1 :(得分:0)

现在您知道外键字段名称为shift,可通过以下方式获取它的related_model:

Calendar._meta.get_field('shift').related_model
相关问题