如何内省django模型领域?

我试图获取模型中的字段的类信息,当我只知道字段的名称和模型的名称(都是纯string)。 这怎么可能?

我可以dynamic加载模型:

from django.db import models model = models.get_model('myapp','mymodel') 

现在我有场 – 'myfield' – 我怎样才能得到这个领域的课程?

如果该领域是关系 – 如何获得相关领域?

谢谢一堆!

你可以使用模型的_meta属性来获取字段对象,并从字段,你可以得到关系,更多的,例如考虑一个雇员表,有一个外键到部门表

 In [1]: from django.db import models In [2]: model = models.get_model('timeapp', 'Employee') In [3]: dep_field = model._meta.get_field_by_name('department') In [4]: dep_field[0].rel.field_name Out[4]: 'id' In [5]: dep_field[0].rel.to Out[5]: <class 'timesite.timeapp.models.Department'> 

从django / db / models / options.py

 def get_field_by_name(self, name): """ Returns the (field_object, model, direct, m2m), where field_object is the Field instance for the given name, model is the model containing this field (None for local fields), direct is True if the field exists on this model, and m2m is True for many-to-many relations. When 'direct' is False, 'field_object' is the corresponding RelatedObject for this field (since the field doesn't have an instance associated with it). Uses a cache internally, so after the first access, this is very fast. """ 

Anurag Uniyal使用get_field_by_name的答案现在(5年后)已过时,因为get_field_by_name已被弃用。 Django会给你以下提示:

RemovedInDjango110Warning:'get_field_by_name是一个非官方的API,已被弃用。 你可以用'get_field()'replace它

get_field API文档在这里 。