我的模型定义如下:
class DatasetPvtdata3(models.Model):
commodity = models.ForeignKey('DatasetSctg', related_name='+', to_field='description', db_column='commodity')
现在在运行时,如果我得到字符串DatasetPvtdata3
(模型名称)和commodity
(字段名称),我如何找到它们对应的外键模型名称和相应的列({{1 }和DatasetSctg
)?
用例是我首先需要在description
模型上运行查询,然后使用该输出来过滤DatasetPvtdata3
。
答案 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
)。