获取Django中模型的属性类型

时间:2015-12-27 04:31:00

标签: python django

伙计们,我正在尝试获取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的原因是因为,如果从前端,我得到一个字符串,实际上是一个整数,我想对它进行类型转换。

帮助?

谢谢!

2 个答案:

答案 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()