如何在Django中查找外键元数据

时间:2013-11-16 17:33:47

标签: django django-models

我的模型定义如下:

class DatasetPvtdata3(models.Model):
    commodity = models.ForeignKey('DatasetSctg', related_name='+', to_field='description', db_column='commodity')

现在在运行时,如果我得到字符串DatasetPvtdata3(模型名称)和commodity(字段名称),我如何找到它们对应的外键模型名称和相应的列({{1 }和DatasetSctg)?

用例是我首先需要在description模型上运行查询,然后使用该输出来过滤DatasetPvtdata3

1 个答案:

答案 0 :(得分:0)

将模型名称作为字符串,我认为获得相应类的最安全方法是使用contenttypes框架。使用您的真实应用名称,这样的事情应该有效:

from django.contrib.contenttypes.models import ContentType
ct = ContentType.objects.get(app_name='my_app_name', model='DatasetPvtdata3')
my_model = ct.model_class()

如果您没有使用内容类型框架,理论上如果您已将模型导入包含查找代码的任何模块,您可以从globals()获取模型,但我不会这样做,除非我必须:

from my_app_name.models import DatasetPvtdata3 
my_model = globals().get('DatasetPvtdata3')

要获取字段对象,请使用my_model._meta.get_field_by_name('commodity')。返回一个元组,其中字段是第一个元素。

获得该字段后,field.rel将成为表示该关系的类。 field.rel.to将是FK的模型(DatasetSctg - 类本身,而不是包含其名称的字符串),field.rel.field_name将是to_field名称(字符串) description)。