伙计们,我正在尝试获取Model的属性类型。例如,请考虑以下模型:
class Option(models.Model):
option_text = models.CharField(max_length=400)
option_num = models.IntegerField()
# add field to hold image or a image url in future
def __unicode__(self):
return self.option_text
我正在以编程方式设置此模型的每个属性。我需要访问属性的类型。例如,对于option_num,我应该能够获得“IntegerField”或等价物。
我看到了meta api,也读了源代码。但我没有找到一种方法来检索内部类型。
model._meta.get_field(attr_value).getInternalType() => gives me an error.
获取“'CharField'对象没有属性'获取内部类型'”。
为了澄清一点,我需要知道属性是字符串还是int的原因是因为,如果从前端,我得到一个字符串,实际上是一个整数,我想对它进行类型转换。
帮助?
谢谢!
答案 0 :(得分:2)
你接近meta选项,但你需要记住一些Python PEP8 Love。
如果您有这样的模型:
class Client(models.Model):
code = models.IntegerField()
name = models.CharField(max_length=96)
...
...
您可以通过以下方式获取类型名称:
Client._meta.get_field('code').get_internal_type()
u'IntegerField'
或者您可以使用以下类型获取类型:
type(Client._meta.get_field('name'))
django.db.models.fields.CharField
直接类似于Class方法,不仅来自类实例。 你的选择。
答案 1 :(得分:2)
重点是使用
model._meta.get_field(attr_name).get_internal_type()
而不是
model._meta.get_field(attr_value).getInternalType()